일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 리버싱
- #크랙미3번
- #크랙미2번
- #크랙미4번
- #심플즈 크랙미
- leetcode
- #크랙미 5번
- #보안이슈
- #abex
- #고클린
- #파밍
- springframework
- #크랙미
- #크랙미 9번
- #보안뉴스
- java8
- Easy
- GraphQL
- #크랙미 10번
- #abex크랙미4번
- #심플즈
- #abex크랙미
- #리버싱
- Spring
- java
- Today
- Total
Halo World
리눅스 커널모드와 유저모드 본문
사용자 애플리케이션이 운영체제에 치명적인 데이터에 접근하여 수정하거나 삭제하지 못하게 막기 위해 유저모드와 커널모드의 두 가지 모드를 지원한다.
프로세서는 유저 모드보다 커널 모드에 높은 권한을 줌으로써 오동작을 유발하는 유저 어플리케이션 등이 시스템 전체에 안전성을 해치지 않게 보장하는 필수 기반을 운영체제 설계자에게 제공한다.
각 프로세스들은 고유한 개별 메모리 공간을 가지지만 커널 모드 운영체제와 디바이스 드라이버 코드는 단일 가상주소 공간을 공유한다. 가상 메모리 내의 각 페이지에는 페이지를 읽고 쓰기 위해 프로세서가 가져야하는 접근 모드가 무엇인지 표시되어 있으며, 시스템 공간의 페이지는 커널모드에서만 접근 가능하다.
| 유저모드
- 유저 어플리케이션이 실행된다
- 커널 모드에서 접근할 수 있는 메모리 공간에 접근하지 못한다.
- 시스템 데이터에 제한된 접근만이 허용되며, 하드웨어를 직접 접근할 수 없다.
- 유저 애플리케이션은 시스템 서비스 호출을 하면 유저모드에서 커널모드로 전환된다.
- 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 |