운영체제와 커널 그리고 시스템 콜

dong5854·2022년 7월 17일
0
post-thumbnail

운영체제란?

자원 할당자

운영체제는 다양한 사용자를 위해 다양한 응용 프로그램 간의 하드웨어 사용을 제어하고 조정하는 자원 할당자라고 바라볼 수 있다. 컴퓨터 시스템은 문제 해결을 위해 요구되는 여러 가지 하드웨어와 소프트웨어 자원들, 즉 CPU 시간, 메모리 공간, 저장장치 공간 입출력 장치 등을 가진다. 운영체제는 이런 자원들을 관리함으로써 컴퓨터 시스템이 효율적이고 공정하게 운영되도록 하는 역할을 한다.

제어 프로그램

운영체제를 다른 관점에서 바라보면 여러 입출력 장치와 사용자 프로그램을 제어하는 제어 프로그램으로도 볼 수 있다. 제어 프로그램은 컴퓨터의 부적절한 사용을 방지하기 위해 사용자 프로그램의 수행을 제어한다. 운영체제는 입출력 자치의 제어와 작동에 특히 깊이 관여한다.

운영체제의 정의

Avraham Silberschatz, ⌜Operating System Concepts 10th edition⌟, 박민규 옮김 책에 의하면 일반적으로 운영체제에 대한 적합한 정의는 없다고 한다. 다만 일반적인 정의로 운영체제는 컴퓨터에서 항상 실행되는 프로그램(일반적으로 커널이라고 함)이다. 커널과 함께 두 가지 다른 유형의 프로그램이 있는데 운영체제와 관련되어 있지만 반드시 커널의 일부일 필요는 없는 시스템 프로그램과 시스템 작동과 관련되지 않은 모든 프로그램을 포함하는 응용 프로그램이다.
또한 오늘날 모바일 기기의 운영체제를 살펴보면 운영체제를 구성하는 기능의 수가 증가하고 있어, 모바일 운영체제는 핵심 커널 뿐만이 아니라 미들웨어(응용 프로그램 개발자에게 추가 서비스를 제공하는 일련의 소프트웨어 프레임워크) 또한 포함된다. iOS와 Android 두 유명한 운영체제 각각에는 데이터베이스, 멏티미디어 및 그래픽을 지원하는 미들웨어화 함께 핵심 터커널이 포함 되어 있다.

요약하면 운영체제에는 항상 실행중인 커널, 응용 프로그램 개발을 쉽게 하고 기능을 제공하는 미들웨어 프레임워크 및 시스템 실행 중에 시스템을 관리하는 데 도움이 되는 시스템 프로그램이 포함된다.

커널이란?

커널은 위에서 설명했다시피 컴퓨터에서 항상 실행되는 프로그램이다. 하지만 이 설명만으로는 커널이 무엇인지 자세히 이해하기 어렵기 때문에 커널이 무엇인지 조금 더 구체적으로 보자.

컴퓨터의 전원을 켜게 되면 운영체제가 이와 동시에 수행된다. 소프트웨어가 컴퓨터에서 수행되기 위해서는 메모리에 올라가 있어야하고 이는 운영체제 또한 해당되는 부분이다. 하지만 운영체제와 같이 규모가 큰 프로그램이 모두 메모리에 올라간다면 메모리의 낭비가 크기 때문에 운영체제 중 항상 필요한 부분만을 메모리에 올려두고 나머지 부분은 필요할 때 메모리에 올라가게 된다. 이 때 메모리에 상주하게 되는 운영체제의 항상 필요한 부분을 커널이라고 한다. 이 커널은 운영체제의 핵심적인 부분으로 좁은 의미의 운영체제라고도 한다.

커널의 역할

커널은 컴퓨터 하드웨어와 프로세스를 잇는 핵심 인터페이스 역할을 하며 두 리소스 사이의 효과적인 통신과 컴퓨터 자원을 관리하는 역할을 한다.

이 커널은 항상 컴퓨터 자원들만을 바라보고 있기 때문에 사용자와의 상호작용을 지원하지 않는다. 이 때 등장하는 것이 시스템 프로그램으로 대표적으로 쉘(shell)과 같은 명령어 해석기들이 커널과 사용자간의 다리 역할을 수행하여 사용자가 쉘을 통해 커널에 명령을 내릴 수 있게 된다.

커널의 목표

커널은 앞서 말한 것처럼 컴퓨터의 리소스를 관리하는 역할은 한다. 이 커널의 가장 큰 목표는 컴퓨터의 하드웨어 자원과 추상화 자원을 관리하는 것이다. 추상화란 하나뿐인 하드웨어를 여러 사용자들이 번갈아 사용할 수 있도록 마치 여러개인 것처럼 보여지도록 하는 기술을 말하는데, 이런 추상화를 통해 각 사용자들은 하나의 하드웨어를 독점하는 것처럼 느낄 수 있다. 이렇게 커널이 물리적 자원 추상화하여 관리하게되면 용어가 달라지는데 대표적으로 아래와 같은 용어들이 물리적 자원 이름 -> 추상화된 자원 용어로 매칭된다.
CPU -> 태스크(Task), 프로세스(Process)
메모리(memory) -> 페이지(page), 세그먼트(segment)
디스크(disk) -> 파일(file)
네트워크(network) -> 소켓(socket)

커널은 컴퓨터의 물리적인 자원과 위와 같이 추상화된 자원을 관리 하는 열할을 하기에 아래와 같은 작업들을 수행한다.

테스크 관리자, Task(Process) Management: 물리적 자원인 CPU를 추상적 자원인 Task(Process)로 제공
메모리 관리자, Memory Management : 물리적 자원인 메모리를 추상적 자원인 Page 또는 Segement로 제공
파일 시스템 관리자, File System : 물리적 자원인 디스크를 추상적 자원인 File로 제공
네트워크 관리자, Network Managment : 물리적 자원인 네트워크 장치를 추상적 자원인 Socket으로 제공
디바이스 드라이버 관리자, Device Driver Management : 각종 외부 장치에 대한 접근
Interrupt Handling : 인터럽트 핸들러
I/O Communication : 입출력 통신 관리

시스템 콜(System Call)

운영체제들은 대부분 커널 모드(Kernal mode, system mode)와 사용자 모드(user mode)가 구분되어 있다.
이렇게 구분을 한 이유는 커널에서 중요한 자원들을 관리하기 때문에 사용자가 이 자원에 접근하지 못하도록 한 것이다.

커널 모드는 커널 및 커널에 붙는 드라이버들이 작동하는 영역으로 모든 컴퓨터 리소스(드라이버, 메모리,CPU등)에 접근할 수 있다. 사스템에 중요한 영향을 미치는 연산들은 커널 모드에서만 실행 가능하도록 해 보안을 유지하고 오류를 방지한다.

사용자 모드(user mode)는 사용자(user)가 접근 할 수 있는 영역으로 일반적인 프로그램을이 작동된다. 컴퓨터 리소스에 제한적으로 접근이 가능하고 프로그램들은 사용자 모드에서 프로세스로 작동한다.

일반적인 프로그램들은 사용자 모드에서 실행되기 때문에 커널 모드에 직접적인 접근이 불가능하다. 하지만 커널의 접근을 할 수 없으면 파일을 읽고 쓰거나 그래픽처리, 화면에 메시지를 출력하는 등 많은 작업을 할 수 없다. 여기서 등작하는 것이 시스템 콜로 유저 모드에서 프로세스가 실행되다가 시스템 콜을 통해 커널에 요청을 한다. 시스템 콜로 요청을 받은 커널은 해당 요청에 대한 일을 하고 해당 결과를 시스템 콜의 리턴값으로 반환해 준다.

유저 모드와 커널 모드의 시스템 콜 흐름은 아래 그림을 통해 더 쉽게 볼 수 있다.

(이미지 출처: https://data-flair.training/blogs/system-call-in-os/)


해당 게시물은 흔히 공룡책이라고 불리는 Avraham Silberschatz, ⌜Operating System Concepts 10th edition⌟, 박민규 옮김 과 인프런 주니온님의 운영체제 공룡책 강의 및 구글링을 통해 접한 글들을 보며 공부한 내용을 작성한 것입니다.

수강 강의
운영체제 공룡책 강의, 인프런, 주니온

출처 및 참고자료

Avraham Silberschatz, ⌜Operating System Concepts 10th edition⌟, 박민규 옮김
https://goodmilktea.tistory.com/23
https://minkwon4.tistory.com/295
https://medium.com/@su_bak/os-%EC%BB%A4%EB%84%90-kernel-%EC%9D%B4%EB%9E%80-b6b8aae8d0b4
https://ko.wikipedia.org/wiki/%EC%8B%9C%EC%8A%A4%ED%85%9C_%ED%98%B8%EC%B6%9C
https://luckyyowu.tistory.com/133
https://blockdmask.tistory.com/69
https://kosaf04pyh.tistory.com/196
https://data-flair.training/blogs/system-call-in-os/

profile
https://github.com/dong5854?tab=repositories

0개의 댓글