Kernel과 System call
커널이란 부팅 후부터 메모리에 상주하며, CPU, 메모리, 캐시 같은 하드웨어 자원을 관리하고, 프로세스, 파일 시스템 관리 등 운영체제의 핵심적인 기능을 실행하는 코드
커널 코드는 구체적으로 함수의 형태로 존재한다. 응용 프로그램은 Function Call이라는 방식을 통해 응용 프로그램 내의 함수나 라이브러리의 함수를 호출하지만, 커널에 있는 함수는 호출할 수 없다.
응용 프로그램이 커널에 있는 함수를 호출할 수 있는 유일한 방법은 System Call 이라는 방식이다.
OS Kernel 인터페이스
- System Call : 커널과 응용프로그램 사이
- Interrupt : 커널과 하드웨어 장치 사이
이 2가지 방식을 이용해 하드웨어와 응용프로그램 사이를 중계한다.
System Call
응용 프로그램이 커널 코드를 실행하기 위한 유일한 방법. 응용 프로그램은 커널 코드에 직접 접근하는 것을 허용하지 않는다. (시스템 안정성, 보안상의 이유) System Call이라는 방법을 사용한다.
직접 접근할 수 없기 때문에, 운영 체제에서 제공하는 System Call 라이브러리를 제공한다. 만약 응용 프로그램에서 printf()(표준 라이브러리)를 실행한다면, 실행 중에 커널 코드에 접근해야한다. 하지만 직접 접근할 수 없기 때문에 System Call 라이브러리에 있는 write()(시스템 호출 라이브러리)으로 대신 커널 코드에 접근하는데 이것이 System Call이다.
interrupt
interrupt는 하드웨어 신호를 물리적으로 발생시켜 CPU에게 알리는 방식이다. 만약 신호가 발생되면 하던일을 중지하고 ISR(인터럽트 서비스 루틴)을 수행한다. ISR()은 함수로 커널이나 디바이스 드라이버 내에 작성된다.
만약, 키보드를 타이핑한다고 했을 때, 키보드를 누르는 순간 interrupt가 발생하게 되고 그 interrupt에 맞는 ISR()이 실행된다. ISR()수행이 끝나면 하던 작업을 마저 한다.
Kernel 과 System call
OS는 응용 프로그램과 커널의 메모리 영역을 나눈다.
- Kernel Space : 커널 코드, 커널 실행에 필요한 데이터들이 적재되는 공간 (부팅시에 적재됨)
- User Space : 응용 프로그램이 적재되고 실행에 필요한 데이터들이 적재되는 공간
위 그림은 32bit Linux이고, User Space는 3GB, Kernel Space는 1GB를 할당한다.
또한 Kernel의 접근을 제한하기 위해 User mode, Kernel mode 2가지로 나눈다. 응용 프로그램은 User mode에서 실행되며 Kernel은 Kernel mode에서 실행된다.
말했듯이 응용 프로그램이 커널의 기능을 실행하기 위해선 System Call 이라는 방법을 사용한다.
왜 공간을 나누는가?
시스템 보안, 안정성 때문에 그렇다. Kernel은 시스템의 핵심 기능을 수행한다. 만약 응용 프로그램과 메모리 공간을 함께 사용한다면 시스템의 핵심 기능을 수행하는데 방해하고, 훼손될 수 있는 가능성이 있기 때문이다.
만약, 응용 프로그램에서 Kernel Space를 접근하려고하면 즉각 OS가 응용 프로그램을 종료시켜 버린다.
사용자 공간 크기
만약 User Space가 3GB라면 응용 프로그램의 크기는 3GB로 제한된다. 응용 프로그램의 크기는 실행에 필요한 힙, 스택, 기타 데이터, 코드 등을 모두 합친 크기이다.
만약, 응용 프로그램의 크기가 3GB 초과라면 실행할 수 없다. 그 이상은 Kernel Space이기 때문이다.
Kernel Space와 User Space는 가상 주소 공간
예를 들어, 32bit Linux OS에서 1GB는 Kernel, 3GB는 User Space인데 이 주소 공간은 OS가 만들어주는 가상 주소 공간이다.
즉, 이 그림은 실제 물리적인 메모리가 아니라 OS가 제공해주는 가상 주소 공간이라는 뜻.
0x0000000 ~ 0xBFFFFFF까지는 User Space, OxC000000~0xFFFFFFFF는 Kernel Space인데, 이 주소를 OS가 응용프로그램에게 만들어 놓은 가상 주소임.
User Space는 응용 프로그램이 독점적으로 사용하고, Kernel Space는 응용 프로그램끼리 공유하며 사용한다.
Mapping Table
운영 체제는 응용 프로그램마다 매핑 테이블을 두고, 시스템의 실제 물리 메모에 매핑한다. 즉, 가상 주소 공간과 매핑 테이블은 프로세스마다 두고, 물리 메모리는 프로세스들이 공유한다.
각각의 프로세스들은 가상 주소 공간 덕분에 자기들만의 메모리 공간을 가지고 있는 셈이된다.
'컴퓨터 공학(Computer Science) > OS' 카테고리의 다른 글
OS와 인터럽트 (0) | 2024.03.30 |
---|---|
Kernel의 실체 (0) | 2024.03.26 |
Kernel, user mode, kernel mode (0) | 2024.03.26 |
배치(batch) OS, 다중 프로그래밍, 시분할 시스템 (0) | 2024.03.14 |