Halo World

리눅스 커널모드와 유저모드 본문

개발 지식/OS

리눅스 커널모드와 유저모드

_Yeony 2017. 7. 4. 23:27

사용자 애플리케이션이 운영체제에 치명적인 데이터에 접근하여 수정하거나 삭제하지 못하게 막기 위해 유저모드와 커널모드의 두 가지 모드를 지원한다.

프로세서는 유저 모드보다 커널 모드에 높은 권한을 줌으로써 오동작을 유발하는 유저 어플리케이션 등이 시스템 전체에 안전성을 해치지 않게 보장하는 필수 기반을 운영체제 설계자에게 제공한다.


각 프로세스들은 고유한 개별 메모리 공간을 가지지만 커널 모드 운영체제와 디바이스 드라이버 코드는 단일 가상주소 공간을 공유한다. 가상 메모리 내의 각 페이지에는 페이지를 읽고 쓰기 위해 프로세서가 가져야하는 접근 모드가 무엇인지 표시되어 있으며, 시스템 공간의 페이지는 커널모드에서만 접근 가능하다.



| 유저모드

 

 - 유저 어플리케이션이 실행된다

 - 커널 모드에서 접근할 수 있는 메모리 공간에 접근하지 못한다.

 - 시스템 데이터에 제한된 접근만이 허용되며, 하드웨어를 직접 접근할 수 없다.

 - 유저 애플리케이션은 시스템 서비스 호출을 하면 유저모드에서 커널모드로 전환된다.

 - CPU 유저 모드 특권 수준으로 코드를 실행한다.

 - 유저모드에서 실행하는 스레드는 자신만의 유저모드 스택을 가진다.



| 커널모드

 

 - 모든 시스템 메모리와 모든 CPU 인스트럭션에 접근이 허가된 프로세스 실행모드

 - 운영체제 코드(시스템 서버와 디바이스 드라이버)가 실행된다.

 - 시스템의 모든 메모리에 접근할 수 있고 모든 CPU 명령을 실행할 수 있다.

 - 운영체제 코드나 디바이스 드라이버 같은 커널 모드 코드를 실행한다.

 - CPU는 커널 모드 특권 수준에서 코드를 실행한다.



| 유저모드와 커널모드 사이 전환


     유저 애플리케이션은 시스템 서비스를 호출할 때 유저모드에서 커널모드로 전환된다. 예를 들어 윈도우 ReadFile 함수는 실제로 파일로부터 데이터를 읽는 기능을 처리할 내부 윈도우 루틴의 호출이 필요하다. 이 루틴은 시스템 데이터 구조체에 접근하므로 커널모드에서 실행되어야 하며, 유저모드에서 커널모드로의 변환은 프로세서를 커널모드로 전환하게하는 특별한 프로세서 인스트럭션의 사용으로 가능해진다. 운영체제는 이 인스트럭션을 통해 시스템 서비스가 요청됐음을 알아채고 스레드가 시스템 함수에 건넨 인자를 검증한 후 내부 함수를 실행한다. 제어를 다시 유저 스레드로 되돌리기 전에 프로세서는 다시 유저모드로 전환된다. 이 방법으로 운영체제는 그 자체와 데이터를 사용자 프로세스가 들여다보거나 변경하지 못하게 보호한다.

유저모드와 커널모드로의 전환과 되돌림은 스레드 스케줄링에 영향을 미치지 않는다. 모드 전환은 컨텍스트 변경이 아니다.





[출처]

http://lapislazull.tistory.com/102 

'개발 지식 > OS' 카테고리의 다른 글

[OS 문제] 2일차  (0) 2017.07.06
커널과 쉘  (0) 2017.07.06
페이징 교체 알고리즘  (0) 2017.07.02
[OS 문제] 1일차  (0) 2017.07.02
OS 메모리 영역  (0) 2017.06.02