오늘 CS 스터디 주제는 '기초탄탄한 개발자가 되자!!' 운동의 일종으로 .. 기본 중 기본인 운영체제에 대해 알아보도록 하겠다!
📌운영체제란?
운영체제(OS, Operating System)란 사용자가 컴퓨터를 쉽게 다루게 해 주는 인터페이스이다.
한정된 메모리나 시스템 자원을 효율적으로 분배해주는 야무진 녀석⭐이라고 생각하면 된다!
📌운영체제의 역할
위에서, 운영체제는 한정된 메모리나 시스템 자원을 효율적으로 분배해준다고 했다. 그래서 '어떻게' 효율적으로 분배한다는 건지, 운영체제의 역할을 통해 알아보자.
운영체제의 역할은 크게 네 가지가 있다.
- CPU 스케쥴링과 프로세스 관리
CPU 소유권을 어떤 프로세스에 할당할지, 프로세스의 생성과 삭제, 어떤 프로세스가 CPU를 점유하고 얼마나 오래 사용하게 할 지 등을 결정한다. - 메모리 관리
한정된 메모리를 어떤 프로세스에 얼만큼 할당해야 하는지 관리한다. - 디스크 파일 관리
디스크 파일을 어떠한 방법으로 보관할 지 관리한다. - I/O 디바이스 관리
I/O 디바이스들인 마우스, 키보드와 컴퓨터 간에 데이터를 주고 받는 것을 관리한다.
📌운영체제의 구조
운영체제의 구조는 다음과 같다.
유저 프로그램이 맨 위에 있고, 그 다음으로 GUI, 시스템콜, 커널, 드라이버가 있다. 가장 아래에 하드웨어가 있는 구조이다.
상단의 그림 대로 GUI, 시스템콜, 커널, 드라이버가 운영체제를 지칭한다.
* 참고로 GUI 대신 CUI만 있는 리눅스 서버도 존재함
[ 용어 ]
GUI : 명령어 창이 아닌 아이콘을 마우스로 클릭하는 단순한 동작으로 사용자가 컴퓨터와 상호작용 할 수 있도록 해주는 사용자 인터페이스의 한 형태.
드라이버 : 하드웨어를 제어하기 위한 소프트웨어
CUI : 그래픽이 아닌 명령어로 처리하는 인터페이스
운영체제를 제대로 이해하기 위해선 '커널'과 '시스템 호출'(= 시스템 콜)의 이해가 필요하다.
커널 영역
메모리는 크게 커널영역과 사용자영역으로 나뉜다.
운영체제도 결국 프로그램 중 하나인데, 운영체제는 컴퓨터 부팅 시 메모리의 커널영역에 적재되어 하드웨어를 직접 조작할 수 있게 된다. (사용자 영역의 프로그램은 기본적으로 하드웨어 제어가 불가하다)
스마트폰이 사용자에게 제공하는 서비스 종류는 다양하지만, 그중에서도 전화, 문자, 인터넷 기능처럼 가장 핵심적인 서비스가 있다.
마찬가지로 운영체제가 응용 프로그램에 제공하는 서비스 종류는 다양하지만, 그중에서도 가장 핵심적인 서비스들이 있다. 자원에 접근하고 조작하는 기능, 프로그램이 올바르고 안전하게 실행되게 하는 기능이 운영체제의 핵심 서비스에 속한다.
이러한 운영체제의 핵심 서비스를 담당하는 부분을 커널이라고 한다.
운영체제가 설치된 모든 기기에는 커널이 있다. (커널은 마치 사람의 심장, 혹은 자동차의 엔진과도 같다)
어떤 커널을 사용하는지에 따라 우리가 실행하고 개발하는 프로그램이 하드웨어를 이용하는 양상이 달라지고, 결과적으로 컴퓨터 전체의 성능도 달라질 수 있다.
오케이! 운영체제가 커널 영역을 통해 하드웨어를 직접 조작할 수 있단 건 알겠다.
여기서 생기는 의문. 그럼 운영체제는 어떻게 커널에 접근하는거임 ???
👉 여기서 나오는 개념이 '시스템 콜'이다.
시스템 콜
시스템콜이란 운영체제가 커널에 접근하기 위한 인터페이스이다. 유저 프로그램이 운영체제의 서비스를 받기 위해 커널 함수를 호출할 때 쓴다.
유저 프로그램이 *I/O 요청으로 트랩(trap)을 발동하면 올바른 I/O 요청인지 확인한 후, 유저 모드가 시스템 콜을 통해 커널 모드로 변환되어 실행된다.
이렇게만 읽으면 이해가 애매하게 될 것이니 (필자가 그랬음) 그림을 통해서 예시를 들어 알아보자!
예를 들어 I/O 요청인 fs.readFile() 이라는 파일 시스템의 파일을 읽는 함수가 발동했다고 해보자.
이때 유저 모드에서 파일을 읽지 않고, 커널 모드로 들어가 파일을 읽고 다시 유저 모드로 돌아가 그 뒤에 있는 유저 프로그램의 로직을 수행한다.
👉 이 과정을 통해 컴퓨터 자원에 대한 직접 접근을 차단할 수 있고, 프로그램을 다른 프로그램으로부터 보호할 수 있다!
유저 모드
유저가 접근할 수 있는 영역을 제한적으로 두며 컴퓨터 자원에 함부로 침범하지 못하는 모드
커널 모드
모든 컴퓨터 자원에 접근할 수 있는 모드
[ 용어 ]
I/O 요청 : 입출력 함수, 데이터베이스, 네트워크, 파일 접근 등에 관한 일
여기 까지 배우니 궁금증이 생겼다. 시스템콜은 유저 모드랑 커널 모드를 어떻게 구분해서 왔다갔다 할 수 있는걸까 🤔
Modebit
위 궁금증에 대한 답은 'modebit' 이다.
시스템 콜이 작동될 때, modebit을 참고해서 유저 모드와 커널 모드를 구분한다.
그래서 modebit이 뭐냐 하면!! modebit은 1 또는 0의 값을 가지는 플래그 변수이다. 풀어서 설명해보겠다.
카메라, 키보드 등 I/O 디바이스는 운영체제를 통해서만 작동되야 한다. 왜일까?
핸드폰으로 카메라를 켜는 프로그램을 실행시킨다고 해보자. 만약 유저 모드를 기반으로 카메라가 켜진다면, 사용자가 의도하지 않았는데 공격자가 카메라를 갑자기 켤 수 있는 등의 나쁜 짓(?)을 하기가 쉬워진다.
물론 커널 모드를 거쳐서 OS를 통해 작동한다고 해도 100% 막을 수는 없지만, OS를 통해 작동하게 해야 막기가 쉽다. 이를 위한 장치를 modebit 이라고 한다.
바로 위 문단에서 modebit은 1 또는 0의 값을 가지는 플래그 변수라고 했다. modebit의 1은 유저 모드, 0은 커널 모드라고 설정된다.
위 그림처럼, 유저 프로그램이 카메라를 이용하려고 할 때 시스템 콜을 호출하고, modebit을 1 👉 0으로 바꾸며 커널모드로 변경한다.
그 후 카메라 자원을 이용한 로직을 수행하고, 다시 modebit을 0 👉 1로 바꿔서 유저 모드로 되돌아 간 다음 이후 로직을 수행한다.
📌용어 정리
커널
운영체제의 핵심 부분이자 시스템콜 인터페이스를 제공하며 보안, 메모리, 프로세스, 파일 세스템, I/O 디바이스, I/O 요청 관리 등 운영체제의 중추적인 역할을 한다.
위 그림처럼 프로세스나 스레드에서 운영체제로 어떤 요청을 할 때, 시스템콜이라는 인터페이스와 커널을 거쳐 운영체제에 전달된다.
장점
시스템 콜은 하나의 추상화 계층이기 때문에, 이를 통해 네트워크 통신이나 데이터베이스와 같은 낮은 단계의 영역 처리에 대한 부분을 많이 신경 쓰지 않고 프로그램을 구현할 수 있다는 장점이 있다.
References
블로그 및 사이트
도서
'Computer Science' 카테고리의 다른 글
[TIL] 캐시와 Redis (Redis 특징과 장점, 사용 시 주의할 점) (0) | 2024.05.28 |
---|---|
[TIL][OS] 프로세스와 스레드의 차이 (1) | 2024.04.24 |
[TIL][CS] TCP/UDP와 동작 과정, TCP 3way handshake (0) | 2024.04.04 |
[TIL][CS] 트랜잭션과 ACID, 트랜잭션의 고립 수준 (0) | 2024.04.02 |
[TIL][OS] 멀티 프로세스와 멀티 스레드의 차이, 컨텍스트 스위칭 (0) | 2024.03.26 |