본 내용은 Operating System Concepts 8th Edition 번역본 책을 읽고 공부한 내용입니다.
목차
1. 운영체제란
1) 운영체제가 하는 일
2) 운영체제의 동작
2. 운영체제의 관리
1) 프로세스 관리
2) 메모리 관리
3) 저장장치 관리
4) 보호와 보안
3. 프로세스
1) 프로그램과 프로세스
2) 프로세스 상태
3) PCB
4. 프로세스 스케줄링
1) 스케줄링 큐
2) 스케줄러(schedulers)
3) 문맥교환(context switching)
1. 운영체제란
1. 운영체제가 하는 일
운영체제의 역할을 알아보기 위해서는 사용자와 시스템 두 관점에서 살펴보아야 한다.
컴퓨터에 대한 사용자의 관점은 사용되는 인터페이스에 따라 달라진다. 어떤 사용자는 모니터/키보드/마우스 를 사용하며 PC 앞에서 작업을 한다. 다른 경우 사용자는 대형 컴퓨터나 미니 컴퓨터에 연결된 터미널에 앉아있기도 하다. 또 다른 경우 가전제품이나 자동차 내 내장형 컴퓨터에서는 굳이 사용자의 개입이 많이 일어나지 않는다. 굳이 개입이 없어도 작동하도록 운영체제가 설계되어 있다.
시스템의 관점에서는 운영체제를 자원 할당자(resource allocator)로 볼 수 있다. 운영체제는 CPU/메모리/입출력장치 자원의 관리자로서 동작한다. 자원에 대해 서로 상충될 수 있는 많은 요청이 있기 때문에 운영체제는 컴퓨터 시스템을 효율적이고 공정하게 운영할 수 있도록 어느 프로그램과 사용자에게 자원을 할당할지를 결정한다. 또한 컴퓨터의 부적절한 사용을 방지하기 위해 사용자 프로그램의 실행을 제어 하는 제어 프로그램의 역할도 맡고 있다.
아래 그림에서 우리는 operating system이 사용자와 hardware 사이에서 작동하는 공통분모의 역할을 하는 것을 볼 수 있다. 다양한 프로그램들을 굳이 일일히 구현하지 않아도 된다.!!
2. 운영체제의 동작
사용자 모드와 커널모드
운영체제는 두 개의 독립된 동작 모드인 사용자 모드(1)와 커널 모드(0)를 필요로 한다. 시스템 부트 시 하드웨어는 커널 모드에서 시작된다. 트랩이나 인터럽트, 시스템 호출이 발생할 때마다 하드웨어는 커널 모드로 변환된다. 반면, 시스템이 사용자 프로그램으로 제어를 넘길 때에는 사용자 모드로 전환된다.
타이머
사용자 프로그램이 무한 루프에 빠지거나, 시스템 서비스를 호출하지 않아서 제어가 운영체제로 복귀하지 않는 경우가 생길 수 있다. 이럴 때 타이머를 사용하여 컴퓨터가 인터럽트하도록 설정할 수 있다.
2. 운영체제의 관리
운영체제는 프로세스/메모리/저장장치 관리와 연관해 다음과 같은 활동에 대한 책임을 진다.
1. 프로세스 관리
- cpu에게 프로세스와 스레드 스케쥴링
- 사용자 프로세스와 시스템 프로세스의 생성과 제거
- 프로세스의 일시 중지와 재실행
- 프로세스 동기화를 위한 기법 제공
- 프로세스 통신을 위한 기법 제공
2. 메모리 관리
- 메모리의 현재 어느 부분이 누구에 의해 사용되고 있는지를 추적한다.
- 어떤 프로세스(또는 그 일부)들을 메모리에 적재하고 제거할 것인가를 결정해야 한다.
- 필요에 따라 메모리 공간을 할당하고 회수해야 한다.
3. 저장장치 관리
- 파일/디렉터리의 생성 및 제거
- 파일과 디렉터리를 조작하기 위한 프리미티브의 제공
- 파일을 보조 저장장치로 매핑
- 디스크 관리 (자유 공간의 관리, 저장 장소 할당, 디스크 스케줄링)
- 캐시 관리
4. 보호와 보안
지금은 OS가 하는 일들을 대략적으로만 보고 세부적인 내용은 뒤에서 더 자세히 알아보자!
3. 프로세스
1. 프로그램과 프로세스
프로그램과 프로세스는 이름은 비슷하나 서로 다른 의미를 가진다.
교수님의 표현에 의하면 프로그램은 '죽어 있다'. 프로세스를 통해 우리는 프로그램에게 일을 시킬 수 있게 된다. 즉, 프로세스란 실행 중인 프로그램을 의미한다.
이 때 OS는 process management의 역할을 한다. system call이나 I/O 사용 등.. 적절한 일을 시키기 위해 프로세스를 조율한다.
2. 프로세스 상태
프로세스는 실행되면서 그 상태가 꾸준히 변화한다. 프로세스의 상태는 그 프로세스 현재의 활동에 따라서 일부 정의된다. 각 프로세스는 다음 상태들 중 하나일 수 있다.
- 새로운(new) - 프로세스가 생성 중이다.
WHEN? User가 program을 시작하였을 때 / OS가 어떤 서비스(프린트 등)를 제공하기 시작할 때 / 프로그램이 다른 프로세스를 시작할 때 - 실행(running) - 명령어들이 실행되고 있는 중이다.
- 준비완료(ready) - 프로세스가 처리기에 할당되기를 기다린다. (prepared to execute). 이 때 프로세스는 메모리에 존재한다.
- 대기(waiting/blocked) - 프로세스가 어떤 사건이 일어나기를 기다린다. IO나 특정한 이벤트가 발생하기를 기다리는 것을 의미한다. ready와 다름 주의 !!
- 종료(terminated) - 프로세스가 실행을 종료하였다.
WHEN? 메모리를 너무 많이 달라고 할 때 / ZERO Division 등 data를 오용할 때 / 잘못된 포인터에 접근할 시(C 프로그램에서 에러 뜰 때를 생각하자!) / I/O 에러
이 task들은 어디에 어떻게 표현이 되고 있는 것일까?
3. PCB
이 task들은 PCB에 기록되어 control된다. PCB란 Process Control Block으로, 프로세스가 생성될 때마다 고유의 PCB가 생성되고, 프로세스가 완료되면 PCB는 제거된다.
해당 프로세스와 연관된 다양한 정보들을 가지고 있으며 다음과 같은 모양을 띠고 있다.
4. 프로세스 스케줄링
어떤 목적을 달성하기 위함인가?
- 다중 프로그래밍 : CPU 이용을 최대화하기 위해서 항상 어떤 프로세스가 실행 중이도록 하는 것
- 시분할 : 각 프로그램이 실행되는 동안 사용자가 상호작용할 수 있도록 프로세스들 사이에서 CPU를 빈번하게 교체하는 것
1. 스케쥴링 큐(Scheduling Queues)
스케쥴링 큐는 linked list로 이루어져 있어 중간에 있는 스케쥴을 빼기에 유리한 자료구조로 이루어져 있다.
준비완료 큐의 헤더는 리스트의 첫 번째와 마지막 PCB를 가리키는 포인터를 포함한다. 각 PCB는 준비완료 큐에 있는 다음 프로세스를 가리키는 포인터 필드를 가진다.
프로세스가 시스템에 들어오면 JOB Queue에 놓여지고, 준비완료(Ready) 상태에서 실행을 대기하는 프로세스들은 준비완료 큐 Ready Queue에 유지된다. 시스템에는 특정 입출력 장치를 대기하는 장치 큐(device queue) 등 많은 큐들이 존재한다.
2. 스케쥴러(schedulers)
프로세스는 일생 동안 위에서 말한 다양한 스케쥴링 큐들 사이를 이주한다. 프로세스를 스케줄링하기 위해 OS는 어떤 방식으로든지 이들을 반드시 선택해야 한다. 어떤 선택 절차를 따를까?
실행빈도에 따라 아래와 같이 스케줄러에 할당된다.
- 장기 스케줄러(잡 스케줄러) - 신중한 선택이 중요하다. 입출력 중심 프로세스와 CPU 중심 프로세스를 적절하게 할당하는 것이 중요하다.
- 단기 스케줄러(CPU 스케줄러) - 실행 간격이 짧아 자주 새로운 프로세스를 선택해야 한다.
UNIX나 Microsoft Windows와 같은 시분할 시스템의 경우에는 모두 단기 스케줄러를 위하여 단순히 메모리에 넣고 처리한다.
뒤에서 배울 라운드로빈, FCFS 방식 등이 이에 해당한다. - 중기 스케줄러 : 시분할 시스템과 같은 일부 운영체제들은 추가로 중간 수준의 스케줄링을 도입하였다.
3. Context switching(문맥 교환)
CPU를 다른 프로세스로 교환하기 위해서는 현재 프로세스의 상태를 저장하고 다른 프로세스의 저장된 상태를 복구하는 작업이 필요하다. 문맥 교환이 일어나면, 커널은 과거 프로세스의 문맥을 PCB에 저장하고, 스케줄된 새로운 프로세스의 저장된 문맥을 복구한다.
'CS > OS' 카테고리의 다른 글
[OS] 프로세스 동기화 (0) | 2023.04.13 |
---|---|
[OS] 다중 스레드 프로그래밍 (0) | 2023.04.12 |
[OS] 프로세스 간 통신 IPC (0) | 2023.04.11 |
[OS] UNIX로 알아보는 PROCESS (3) | 2023.04.11 |
[OS] OS 기초 1 (0) | 2023.03.24 |