커널이란 무엇일까?
운영체제의 핵심 부분이다.
1. 운영체제란? 에서도 설명했지만 컴퓨터를 부팅하게 된다면 OS를 실행하기 위해 기본적인 실행코드들이 실행된다. 이 때, 커널 코드와 GUI, 작업 스케쥴러에 의한 최초 실행 프로그램들이 메모리에 적재된다.
그 중 우리는 운영체제의 모든 정보를 관리하고 있는 커널에 대해서만 생각해야한다.
커널에는 시스템 호출(System Call)과 인터럽트(Interrupt)라는 인터페이스가 제공되고 있다. 앞서, 설명한 내용이지만 시스템 호출은 응용 프로그램과 OS 간에 인터페이스이고 인터럽트는 HW와 OS 간에 인터페이스이다.
시스템 호출에서 제공하는 기능들은 open(), close(), fork()와 같이 ABI라고도 불리는 유명한 시스템 프로그래밍 기능들이다. 인터럽트는 우리가 키보드나 마우스를 클릭할 때, 발생하는 전기신호로 인터럽트 서비스 루틴이 실행되고 커널 영역의 버퍼에 해당 내용을 저장한다. 디스플레이, HW 등과 관련된 모든 작업이 인터럽트를 통해 발생하는 것이다.
커널의 등장 배경
운영체제의 발전을 보게되면 다중프로그래밍 운영체제를 도입하게 되었다. 이 때, 응용프로그램이 직접 컴퓨터 자원에 접근하면 다른 응용프로그램이 사용하고 있는 메모리에 접근하면서 데이터 손실이 발생하거나 운영체제의 영역도 침범하게 되는 문제가 발생한다. 그래서 커널이 등장하게 된다.
메모리 공간을 사용자 공간과 커널 공간으로 분리해서 자원의 모든 접근은 커널에만 부여한다. 커널은 커널 공간에만 적재하고 응용프로그램은 사용자 공간에만 적재하면서 사용자는 시스템 호출을 통해 커널 공간의 커널 기능을 이용하도록 했다. OS는 사용자가 커널에 강제로 접근하면 응용프로그램을 강제로 종료하도록 하는 역할도 수행한다.
사용자 공간과 커널 공간
사용자 공간은 모든 응용프로그램들이 적재되는 공간으로 한 프로그램 당 프로그램 코드 영역 + 데이터 영역 + Heap 영역 + 스택 영역을 합친 크기로 사용자 공간에 적재된다. 만약 프로그램 크기가 실제 메모리보다 큰 경우도 발생한다.
이런 경우를 해결하기 위해 가상 주소라는 개념이 나오는데 후에 다룰 내용이다.
커널 공간은 커널만 사용할 수 있는 공간으로 커널 코드, 디바이스 드라이버 등 커널에 의해 배타적으로 사용되는 공간이다. 두 공간은 응용프로그램이 커널 영역을 침범하면서 백그라운드로 실행되고 있을 커널 데이터를 수정하게 되는 문제가 발생할 수 있기 때문에 분리되었다.
커널 공간의 처리
사용자 공간에서 처리를 하는 중 System Call이 발생하는 경우, CPU의 모드 레지스터의 비트를 True로 바꾸면서 특권명령을 처리할 수 있다. mode가 False일 경우 사용자 모드에서 처리하고 있다는 뜻이며 이 때, System Call을 통해 mode가 True로 바뀌지 않았는데 커널 영역을 접근할 경우 에러가 발생하게 된다.
'CS > 운영체제' 카테고리의 다른 글
8. 프로세스 제어 블록 (PCB, Process Control Block) (0) | 2024.04.21 |
---|---|
7. 프로세스 (Process) (0) | 2024.04.21 |
5. 운영체제의 역할 (1) | 2024.04.21 |
4. 시분할 다중프로그래밍(Time Sharing Multi-Programming) OS (0) | 2024.04.21 |
3. 다중 프로그래밍 (Multi-Processing) OS (1) | 2024.04.21 |