1. 커널 모드와 유저 모드
-메모리 영역은 사용자에 의해서 할당되는 메모리 공간인 유저 영역과 운영체제라는 하나의 소프트웨어를 실행시키기 위해서 필요한 메모리 공간인 커널 영역으로 나뉜다.
-사용자가 사용하는 메모리 영역은 유저 영역이지만 C언어는 메모리 참조가 용이하기 때문에 안정성 제공 측면에서 커널 모드와 유저 모드가 사용된다.
-기본적으로 유저 모드로 동작하다가 Windows 커널이 실행되어야 하는 경우에 커널 모드로의 전환이 일어난다.
-커널 모드와 유저 모드의 차이는 유저 모드에서 동작할 때 커널 영역으로의 접근이 금지된다. 커널 모드일 때는 모든 영역의 접근이 허용된다.
-Windows 에서 운영체제 차원에서 제공되는 시스템 함수들 중 일부는 호출시 커널 모드로 동작한다.
-주의할 점은 모드의 전환은 시스템에 부담을 준다.
-커널 모드와 유저 모드를 제공하는 대상은 Windows운영체제가 아닌 프로세서(Process)이다. 즉 메모리 보호 기능이 CPU에 달려있다.
리눅스 시스템콜
리눅스는 유저 모드
와 커널 모드
두개의 실행영역을 가진다. 유저 모드는 일반 응용 프로그램이 실행되는 영역이고, 커널 모드는 커널(:12) 명령이 실행되는 영역이다. 하드웨어에 대한 모든 제어는 커널 모드
에서 이루어진다. 두개의 모드로 나눈 이유는 다중 사용자 / 다중 프로세스 운영체제에서 자원에 대한 관리와 보안 을 위함이다.
응용 프로그램은 커널 모드에 진입을 할 수 없으므로 하드웨어에 대한 접근을 할 수 없다. 이는 메모리 할당, 파일 읽기/쓰기와 같은 주요한 작업을 할 수 없음을 의미한다. 하지만 이래서는 제대로 된 응용 프로그램을 만들 수 없 을 것이다.
리눅스 커널은 "간접 접근 방식"으로 이 문제를 해결 한다. 직접 하드웨어에 접근하는 대신 커널에게 자원의 사용을 요청
을 하고, 커널이 자원의 사용을 허락하는 방식이다.
이때 커널이 응용 프로그램에 제공하는 함수가 시스템콜
이다.
http://www.joinc.co.kr/w/man/12/%EC%8B%9C%EC%8A%A4%ED%85%9C%EC%BD%9C
커널모드란??
커널모드를 검색하다가 이해가 안되던 도중 pdf 파일을 하나 발견하고 내용이 쉽게 이해되 바로 설명하며 포스팅을 써보았습니다.
일단 커널모드란?
리눅스 커널은 프로그램을 실행할 때 크게 두 가지의 모드에서 실행을 한다. 커널 모드 (kernel mode)와 사용자 모드(user mode)가 그것인데, 이 두 모드에 대해서 간단히 설명 을 하자면 커널 모드에서의 프로그램들은 직접적인 하드웨어 요청이나 중요한 시스템 요 청을 할 때 사용되는 모드이다. 일반적으로 사용자가 직접적으로 하드웨어 장치를 사용한 다면 큰 문제가 발생할 수도 있는 데 이것을 방지하기 위해서 커널 모드로 프로그램이 실 행되면서 하드웨어 제어를 커널에서만 할 수 있도록 한 것이다. 원래 사용자가 어느 한 프로그램을 실행하면 사용자 모드에서 실행이 되다가 그 프로그 램이 하드웨어 장치를 사용해야 할 경우 사용자 모드에서 실행되고 있던 프로그램이 커널 모드로 제어권이 넘어가서 하드웨어 장치를 사용하게 된다. 하드웨어 장치를 다 사용하게 되면 다시 프로그램은 사용자 모드로 다시 제어권이 넘어가서 나머지 프로그램을 실행하 게 된다.
설명이 쉽게 나와있는데 이걸로 이해가 안된다면
아래를 보자
*혼자 이해한거라 틀릴 수도 있어요.
1.일반 사용자가 프로그램을 사용한다.
2.일반 사용자는 하드웨어를 직접 제어하게되면 문제가 발생할수 있기에 커널 모드로 프로그램이 실행되면서 하드웨어 제어를 커널에서만 할 수 있도록 하였다.
3.프로그램이 하드웨어 사용이 다 끝나면 다시 그 프로그램은 사용자 모드로 제어권이 넘어가게 된다.
대충 이해 됬으면 개념도를 보도록 하자
이해가 다 되었어도 개념도를 보니 다시 멍해지는 기분이다...
천천히 한번 보도록하자
자료사진과 보고 참고한 곳은 : http://www.scitech.co.kr/upload/book_image/s_402/ESDP-Ch06.PDF
이걸로 많이 참고했습니다.
포스팅은 여기까지.
http://blog.naver.com/stillstick/220463132509
'프로그래밍(Programming) > c++, 11, 14 , 17, 20' 카테고리의 다른 글
[C++] final 키워드( 선언시, 상속제어 등 ) sealed 한정자 (1) | 2016.07.04 |
---|---|
[C++11] default 키워드와 delete 키워드 (1) | 2016.07.04 |
클로져 (Closure) 객체 와 람다(lambda) 함수 (0) | 2016.06.03 |
[용어] 하드 코딩 (Hard - coding) (0) | 2016.04.28 |
#pragma pack 구조체 패킹 (1) | 2016.03.24 |