강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

오류님의 프로필 이미지
오류

작성한 질문수

Windows System 프로그래밍

01_Windows_OS_개요

유저모드와 커널모드 차이

해결된 질문

작성

·

26

·

수정됨

0

PPT에 유저모드는 하드웨어 접근 X라고 나와있고, 커널모드는 하드웨어 직접 접근이라 나와있는데 유저모드에서 syscall을 보내면 그것도 하드웨어 접근이 맞지 않나요? 그럼 유저모드에서도 접근 O인 거 같은데 이부분이 살짝 헷갈립니다..!
만약에 제가 이해한게 맞다면 syscall도 user mode 인터페이스일텐데 인터럽트를 통해 컨텍스트 스위칭이 된다면 직접 접근 할 수 있는 명령어가 아닐까 싶어서요..!

답변 1

1

megayuchi님의 프로필 이미지
megayuchi
지식공유자

syscall이 하드웨어 접근이라고 하면 a = 0;이라는 코드를 어셈블리 레벨에서 보면 mov eax,0 이런식으로 컴파일되므로 cpu를 제어한다 -> 하드웨어를 제어한다. 라고 볼 수 있습니다. 그러니까 사실 메모리에 읽고 쓰는 행위도 모두 하드웨어에 접근한다고 할 수 있습니다.

하지만 통상적으로 말하는 하드웨어에 대한 '직접'접근은 이 모든 행위를 뜻하는건 아닙니다. 세부적으로 보면 CPU를 제외한 하드웨어를 제어하는걸 말합니다. cpu자체를 제어하거나 cpu를 통해 메모리를 읽고 쓰는 행위는 하드웨어 제어라고 부르진 않구요. 너무 당연한 행위니까요. cpu가 다른 장치(ssd,gpu,마우스,키보드,랜카드...등등)로부터 인터럽트를 받았을 때의 핸들링, 또는 그 장치들을 제어(cpu에 메모리 주소 선 외에 외부장치와 통신하기 위한 주소 선이 따로 있습니다)하는 행위들을 일반적으로 하드웨어 제어라 합니다. 이런 제어는 일반적으로 어셈블리어 레벨에서 in, out명령을 사용하는데 이것은 유저모드에서 호출이 불가능합니다.

이외에는 강의 진행중에 나오겠지만 메모리 억세스를 위한 페이지테이블을 설정하는 기능등을 위해 cpu에 존재하는 특수한 레지스터들(cr0등)을 억세스하는 행위도 유저모드에선 금지되어있습니다.

예시를 들어 정리하자면

일반적인 유저모드 코드 - 정해진 메모리에 대한 읽기,쓰기,시스템콜을 위한 일부의 정해진 인터럽트 호출

커널모드에서의 하드웨어 제어 코드 - 가상메모리 억세스를 위한 페이지테이블 설정, 다른 장치를 제어하기 위한 in,out명령 사용, 모든 인터럽트에 대한 핸들러 설정, 인터럽트 콜

 

이렇게 볼 수 있습니다.

오류님의 프로필 이미지
오류
질문자

헉 빠른 답변 감사합니다..!

질문의 질이 많이 떨어져서 죄송합니다..!

오류님의 프로필 이미지
오류
질문자

감사합니다!

오류님의 프로필 이미지
오류

작성한 질문수

질문하기