Chapter 9. 운영체제 시작하기
요약
운영체제의 개요와 운영체제가 하드웨어의 시스템을 어떻게 통제하는지 이해할 수 있었다.
내용 정리
09-1. 운영체제를 알아야 하는 이유
운영체제란
운영체제(Operating system)
- 실행할 프로그램에 필요한 자원을 할당하고, 프로그램이 올바르게 실행되도록 돕는 프로그램
- 시스템 자원: 프로그램 실행에 필요한 요소들로 줄여서 자원이라고도 부름
- 근본 프로그램이기 때문에 컴퓨터가 부팅될 때 메모리의 커널 영역 내에 따로 적재돼 실행된다.
- 커널 영역(kernel space): 운영체제가 메모리에 적재되는 공간
- 사용자 영역(user space): 커널 영역을 제외한 영역으로 사용자가 이용하는 응용 프로그램이 적재되는 공간
- 응용 프로그램(application software): 사용자가 특정 목적을 위해 사용하는 일반적인 프로그램
운영체제의 역할
1. 지속적인 메모리 자원 관리
- 실행할 프로그램을 메모리 사용자 영역에 적재
- 더 이상 실행되지 않는 프로그램은 메모리에서 삭제
2. 공정하게 여러 프로그램을 CPU 자원에 할당
- 특정 프로그램이 CPU를 독점하면 다른 프로그램은 실행이 어렵기 때문에 스케쥴링 역할을 운영체제가 함
3. 관리할 자원별로 기능을 분리함
- 운영체제 내에 CPU, 프로세스, 파일 시스템, 메모리 등 각 자원별로 관리하는 기능을 분리함
4. low단계 하드웨어 조작 코드를 작성할 필요가 없음
- 운영체제에 의해 하드웨어가 조작되고 관리되기 때문에 개발자가 하드웨어를 조작하는 코드를 직접 작성할 필요 적음
운영체제를 알아야 하는 이유
- 운영체제에서 제공하는 아래 정보들을 통해 문제 발생 시 해결할 방법들을 찾을 수 있다.
- 현재 하드웨어들의 상태
- 코드가 어떻게 실행되었는지
- 하드웨어 상에 존재하는 문제들
- 이를 통해 하드웨어와 프로그램을 더 깊이 이해할 수 있음
09-2. 운영체제의 큰 그림
사전 지식
- 운영체제는 현존 프로그램 중 가장 규모가 큰 프로그램이다.
- 운영체제는 사용자를 위한 프로그램이기 보다는 사용자가 실행할 프로그램을 위한 프로그램이다.
커널(kernel)
- 운영체제의 핵심 서비스를 담당하는 부분
- 운영체제가 설치된 모든 기기에는 커널이 존재한다.
- 어떤 커널을 사용하는지에 따라 응용 프로그램이 하드웨어를 이용하는 방법이 달라지고, 컴퓨터의 성능도 달라지게 된다.
사용자 인터페이스(UI, User Interface)
- 운영체제가 제공하는 서비스 중 커널에는 포함되지 않는 서비스
- 사용자가 컴퓨터와 상호작용할 수 있는 통로로 윈도우 바탕화면을 예로 들 수 있다.
- 사용자 인터페이스에는 그래픽 유저 인터페이스와 커맨드라인 인터페이스가 있다.
그래픽 유저 인터페이스(GUI; Graphic User Interface)
- 그래픽을 기반으로 컴퓨터와 상호작용할 수 있는 인터페이스
커맨드라인 인터페이스(CLI; Command Line Interface)
- 명령어 기반으로 컴퓨터와 상호작용할 수 있는 인터페이스
이중 모드와 시스템 호출
응용 프로그램의 하드웨어 접근
- 운영체제는 응용 프로그램이 하드웨어 자원에 직접 접근하는 것을 방지하여 자원을 보호한다.
- 응용 프로그램들은 자원 접근 시, 운영체제에 자원 접근 요청을 한다.
- 운영체제는 요청받은 작업을 직접 자원에 접근해 수행한다.
- 위 접근 방식을 위해 운영체제는 이중 모드를 이용한다.
이중 모드(dual mode)
- CPU가 명령어를 실행하는 모드를 아래 두가지로 분리함
- 사용자 모드
- 커널 모드
- CPU는 명령어를 사용자 모드와 커널 모드로 모두 실행 가능하지만, 응용 프로그램은 사용자 모드로만 실행 가능
- CPU 모드는 플래그 레티스터 속 슈퍼바이저 플래그에 표시된다.
사용자 모드(user mode)
- 운영체제 서비스를 제공 받을 수 없는 실행모드
- 커널 영역의 코드를 실행할 수 없다.
- ex. 입출력명령어와 같이 하드웨어 자원에 접근하려는 명령어
- 일반적인 응용 프로그램은 사용자모드로 실행되며, 프로그램 단독으로 자원에 접근할 수 없다.
커널 모드(kernel mode)
- 운영체제 서비스를 제공받을 수 있는 실행모드
- 커널 영역의 코드를 실행할 수 있다.
- ex. 자원에 접근하는 명령어 등 모든 명령어를 실행할 수 있다.
- 운영체제는 커널모드로 실행되며, 프로그램은 운영체제를 통해서 자원에 접근할 수 있다.
시스템 호출(system call)
- 사용자 모드로 실행되는 프로그램이 운영체제 서비스를 제공받기 위해 운영체제에 보내는 요청
- 시스템 호출을 통해 프로그램은 운영체제 서비스 (커널 모드)를 제공받을 수 있다.
- 시스템 호출은 일종의 소프트웨어 인터럽트로 볼 수 있다.
- 소프트웨어 인터럽트: 특정 명령어에 의해 발생하는 인터럽트
- 응용 프로그램 실행 과정에서 운영체제 서비스는 매우 빈번하게 이용된다.
- 따라서 빈번하게 시스템 호출이 발생되며, 프로그램은 사용자 모드와 커널 모드를 오가며 실행된다.
시스템 호출 과정
1. 응용 프로그램이 운영체제에 시스템 호출 전송
2. CPU는 지금까지의 응용프로그램 작업을 백업 및 커널 모드로 전환
3. 커널 영역 내 시스템 호출을 수행하는 코드 (인터럽트 서비스 루틴) 실행
4. 사용자 모드 전환 후 기존에 실행하던 응용프로그램으로 복귀 및 실행 재개
운영체제의 핵심 서비스
1. 프로세스 관리
- CPU는 프로세스들을 번갈아가며 실행한다.
- 프로세스(process): 실행 중인 프로그램
- 이를 위해 운영체제는 다양한 프로세스를 관리하고 적절히 실행할 수 있어야 한다.
- 프로세스를 처리하며 아래의 이슈들을 해결할 수 있어야 한다.
- 프로세스 동기화
- 프로세스 교착 상태 해결
2. 자원 접근 및 할당
- 운영체제는 프로세스들이 사용할 자원에 접근하고 조작해 프로세스에 필요한 자원들을 할당할 수 있어야 한다.
- 컴퓨터의 네 가지 핵심 자원(CPU, 메모리, 보조기억장치, 입출력장치) 의 사용을 관리한다.
CPU
- CPU 스케줄링
- 운영체제는 프로세스들에 공정하게 CPU를 할당해야 한다.
- 따라서 어떤 프로세스부터 CPU를 사용할지(우선순위), 얼마나 오래 CPU를 사용할지 결정한다.
메모리
- 아래의 사항들을 운영체제는 관리한다.
- 새로운 프로세스가 적재될 때 운영체제는 메모리의 어느 주소에 적재할지
- 메모리가 부족할 경우 어떻게 해결할지
- 메모리 공간이 남았는데도 프로세스를 적재하지 못하는 경우
입출력장치
- 입출력장치의 작업을 수행한다.
- 인터럽트 서비스 루틴을 제공함으로써 하드웨어 인터럽트를 처리한다.
3. 파일 시스템 관리
- 운영체제는 보조기억장치의 데이터를 파일과 디렉터리로 관리함
- 파일 시스템(file system): 여러 파일을 묶어서 디렉터리(폴더)로 관리할 수 있게 하는 서비스
가상 머신과 모드
현대 CPU는 가상화를 지원하기 위해 두 가지 모드 이상이 존재한다.
가상 머신(virtual machine)
- 소프트웨어적으로 만들어낸 가상 컴퓨터
- 가상 머신에는 새로운 운영체제와 응용 프로그램을 실행할 수 있다.
기존 모드
- 한편 컴퓨터에 가상머신을 실행한다는건, 가상 머신도 응용프로그램으로 실행하는거다.
- 즉, 기존 설명대로라면 응용 프로그램이기 때문에 사용자 모드이다.
- 가상 머신 상에 설치된 새로운 운영체제도 사용자 모드로 동작할 것이다.
- 이는 가상 머신에 설치된 운영체제가 가상 머신 속 응용프로그램에 운영체제 서비스를 온전히 제공하기 어렵게 된다.
하이퍼바이저 모드
- 커널 모드와 사용자 모드 이외에 가상 머신을 위한 모드
- 가상 머신 상의 응용 프로그램들은 가상 머신의 운영체제를 통해 자원을 요청함
- 가상 머신의 운영체제는 하이퍼바이저 모드를 통해 운영체제 서비스를 제공함
시스템 호출의 종류
시스템 호출
- 시스템 호출은 운영체제 서비스를 제공받기 위한 방법
- 응용 프로그램이 자원 접근을 가능하게 한다.
- 운영체제는 커널 모드로써 프로그램 대신 자원에 접근한다.
- 개발자가 작성하는 프로그램이 언어들은 내부적으로 시스템 호출을 통해 실행된다.
- 운영체제가 제공하는 서비스가 많기 때문에 시스템 호출의 종류는 매우 다양하다.
유닉스, 리눅스 등 운영체제(POSIX 운영체제)의 대표적 시스템 호출 종류
종류 | 시스템 호출 | 설명 |
프로세스 관리 | fork() | 새 지식 프로세스 생성 |
execve() | 프로세스 실행 | |
exit() | 프로세스 종료 | |
waitpid() | 자식 프로세스 종료 시까지 대기 | |
파일 관리 | open() | 파일 열기 |
close() | 파일 닫기 | |
read() | 파일 읽기 | |
write() | 파일 쓰기 | |
stat() | 파일 정보 획득 | |
디렉터리 관리 | chdir() | 작업 디렉터리 변경 |
mkdir() | 디렉터리 생성 | |
rmdir() | 비어있는 디렉터리 삭제 | |
파일 시스템 관리 | mount() | 파일 시스템 마운트 |
unmount() | 파일 시스템 마운트 해제 |
참고
- BIOS와 운영체제 간 관계 - https://quasarzone.com/bbs/qf_cmr/views/85439
- 리눅스 시스템 호출 종류 - https://github.com/kangtegong/self-learning-cs/tree/main/system_calls
주요 Point
- 파일읽기/쓰기 등 → 커널모드
- 시스템 호출 종류가 있으며 이 시스템 호출 종류를 사용하면 사용자 모드에서 커널 모드로 넘어간다.
'Study > 컴퓨터공학' 카테고리의 다른 글
[컴퓨터 구조] 혼자 공부하는 컴퓨터구조 + 운영체제 Chapter 11 CPU 스케줄링 (4) | 2022.12.06 |
---|---|
[컴퓨터 구조] 혼자 공부하는 컴퓨터구조 + 운영체제 Chapter 10 프로세스와 스레드 (0) | 2022.11.30 |
[컴퓨터 구조] 혼자 공부하는 컴퓨터구조 + 운영체제 Chapter 8 입출력장치 (2) | 2022.11.24 |
[컴퓨터 구조] 혼자 공부하는 컴퓨터구조 + 운영체제 Chapter 7 보조기억장치 (0) | 2022.11.20 |
[컴퓨터 구조] 혼자 공부하는 컴퓨터구조 + 운영체제 Chapter 6 메모리와 캐시 메모리 (2) | 2022.11.10 |