운영체제의 큰 그림
대표적으로 우리가 알고 있는 원도우와 맥OS, 리눅스는 데스크탑의 운영체제이며, 안드로이드와 ios는 스마트폰의 운영체제이다. 운영체제는 방대한 프로그램이므로 많은 종류와 기능들이 있지만, 종류와 관계없이 운영체제가 제공하는 핵심적인 기능은 비슷하다.
이러한 운영체제의 핵심 기능을 담당하는 부분이 커널(kernel)이라고 하며, 대부분 운영체제 학습에서 언급되는 운영체제 용어는 커널을 지칭한다고 이해하면된다.
운영체제에는 크게 2가지 핵심 기능있다.
- 프로세스 및 스레드 관리
- 프로세스와 스레드
- 동기화와 교착 상태
- 자원 할당 및 관리
- CPU관리: CPU 스케줄링
- 메모리 관리: 가상 메모리
- 파일/디렉토리 관리: 파일 시스템
운영체제의 역할
운영체제의 핵심 기능인 자원 할당 및 관리에 대해 알려면 자원(resource)에 대해 알 필요가 있다. 자원이란 프로그램 실행에 마땅히 필요한 요소를 의미하며, 소프트웨어와 하드웨어를 의미한다.
응용 프로그램은 CPU 등 부품에 직접 접근이 불가능하다. 운영체제는 응용 프로그램을 대신해 CPU, 메모리, 보조기억장치 등의 컴퓨터 부품에 접근하고, 각각의 부품들이 효율적으로 사용되도록 관리한다.
또, 응용 프로그램이 컴퓨터 부품들을 효율적으로 할당받아 문제 없이 실행할 수 있도록 자원을 할당한다.
시스템 콜과 이중 모드
운영체제을 이해하기 위해선 커널과 함께 시스템 콜이라는 용어를 알아야 한다. 운영체제도 일종의 프로그램 개념으로 실행되기 위해선 반드시 메모리에 적재 되어야 한다. 다만 운영체제는 매우 특별한 프로그램이기 때문에 메모리 내의 커널영역(kernel space)라는 공간에 따로 적재되어 실행된다. 우리가 알고 있는 일반 프로그램을 사용자 영역(user space)에 적재된다고 생각하면 된다.
일반적으로 웹 브라우저나 게임 같은 사용자 영역에 응용 프로그램은 CPU, 메모리와 같은 자원에 직접 접근하거나 조작할 수 없다. 특정 자원에 접근하기 위해선 반드시 운영체제 코드를 실행하여야지만 한다. (운영체제가 자원 접근 및 조작을 대행한다고 생각하면 된다.)
응용 프로그램은 운영체제의 코드를 실행하기 위해 사용되는 것이 시스템 콜(system call)이다. 시스템 콜은 운영체제 서비스를 제공받기 위해 커널 모드로 전환하는 것이라고 이해해도 된다.
운영체제에서 제공하는 시스템 콜의 종류가 개수는 다양하다. 다음은 유닉스 계열에 운영체제에서 사용하는 대표적인 명령어이다.
구분 | 시스템 콜 | 설명 |
프로세스 관리 | fork() | 새 자식 프로세스 생성 |
execve() | 프로세스 실행(메모리 공간을 새로운 프로그램의 내용으로 덮어씌움) | |
exit() | 프로세스 종료 | |
waitpid() | 자식 프로세스가 종료할 때까지 대기 | |
파일 관리 | open() | 파일 열기 |
close() | 파일 닫기 | |
read() | 파일 읽기 | |
write() | 파일 쓰기 | |
stat() | 파일 정보 획득 | |
디렉토리 관리 | chdir() | 작업 디렉토리 변경 |
mkdir() | 디렉토리 생성 | |
rmdir() | 비어 있는 디렉토리 삭제 | |
파일 시스템 관리 | mount() | 파일 시스템 마운트 |
unmount() | 파일 시스템 마운트 해제 |
시스템 콜 호출 시 동작
컴퓨터 내부에서 시스템 콜이 실행되면 다음과 같은 작업이 수행된다. 여기서 핵심은 소프트웨어 인터럽트와 커널 모드, 사용자 모드이다.
소프트웨어 인터럽트 발생 -> CPU의 커널 모드 전환 -> 운영체제 코드 실행 -> 사용자 모드 전환
운영체제에는 인터럽트를 발생시키는 특정 명령어가 있고, 이러한 명령어에 의해 발생된 인터럽트가 소프트웨어 인터럽트이다. 시스템 콜이 바로 이 소프트웨어 인터럽트의 일종이다.
다음과 같은 동작으로 진행이 된다.
1. 사용자 영역을 실행하는 과정에서 시스템 콜이 호출되면 CPU는 현재 수행 중인 작업을 백업한다.
2. 커널 영역 내의 인터럽트를 처리하기 위한 코드(시스템 콜을 구성하는 코드)를 실행한다.
3. 다시 사용자 영역으로 복귀하여 코드를 실행을 재개한다.
위 동작 과정을 보면 사용자 영역에서 실행 될때와 커널 영역에서 실행할 때의 모드를 구분하여 실행한다. 이때 사용자 영역에서 실행 할때 실행 모드는 사용자 모드(user mode)라 하고, 커널 영역에서 실행할 때의 실행 모드는 커널 모드(kernel mode)라 한다. 이렇게 2개의 모드로 구분하여 실행하는 것을 이중 모드(dual mode)라 한다.
사용자 모드는 운영체제 서비스를 제공받을 수 없는 실행모드, 커널 모드는 운영체제 서비스를 제공받는 실행모드라고 이해하면 된다.
출처
'Knowledge > 컴퓨터구조&운영체제' 카테고리의 다른 글
[운영체제] 프로세스 상태와 계층 구조 (0) | 2024.12.06 |
---|---|
[운영체제] 커널 영역과 사용자 영역의 프로세스 (PCB, 문맥교환, 메모리 영역) (1) | 2024.12.06 |
[컴퓨터구조] 입출력장치 - 장치 컨트롤러, 드라이버, DMA (0) | 2024.12.02 |
[컴퓨터구조] 보조기억장치와 RAID (0) | 2024.12.02 |
[컴퓨터구조] 캐시메모리 (0) | 2024.11.30 |