앞의 글
2024.01.07 - [Book] - 혼공학습단11기_혼공컴운 시작
2024.01.07 - [Book] - [혼공컴운]혼공학습단11기_1주차+기본, 선택미션
2024.01.14 - [Book] - [혼공컴운]혼공학습단11기_2주차+기본, 선택미션
2024.01.21 - [Book] - [혼공컴운] 혼공학습단11기_3주차+기본, 선택미션
혼공컴운 4주차.
Chapter 9. 운영체제 시작하기
09-1 운영체제를 알아야 하는 이유
시작하기 전에
컴퓨터 구조에서 학습한 부품을 관리하는 특별한 프로그램인 운영체제를 학습한다.
** 강사님 말씀 : 개발자 입장에선 앞의 컴퓨터 구조 보다 운영체제가 더 중요하니 꼭!! 새겨들어주세요.
운영체제란
시스템 자원 : 프로그램 실행에 마땅히 필요한 요소들, 시스템 자원을 줄여서 자원이라고도 함.
CPU, 메모리, 보조기억장치, 입출력장치 등과 같은 컴퓨터 부품들은 모두 자원이다.
운영체제 : 실행할 프로그램에 필요한 자원을 할당하고, 프로그램이 올바르게 실행되도록 돕는 특별한 프로그램.
운영체제는 항상 부팅될 때 메모리 내 커널 영역에 적재되어 실행하는 프로그램이다.
운영체제 또한 프로그램들과 마찬가지로 메모리에 적재되어야 한다.
다만 매우 특별한 프로그램이기에 항상 컴퓨터가 부팅 될 때, 메모리 내 커널 영역이라는 공간에 따로 적재되어 실행된다.
사용자 영역 : 커널 영역을 제외한 나머지 영역, 사용자가 이용하는 응용 프로그램이 적재되는 영역
응용 프로그램 : 사용자가 특정 목적을 위해 사용하는 일반적인 프로그램.
운영체제를 알아야 하는 이유
운영체제를 깊이 이해한다면 운영체제가 하는 말을 이애할 수 있고, 제대로 명령할 수도 있다.
개발자 입장에선 중요한 개념.
운영체제는 현재 HW의 상태는 어떠한지, 여러분의 코드가 어떻게 실행되었는지, HW 상에 어떤 문제가 있었는지 등을 여러분에게 상세히 알려줄 수 있고, 이를 통해 문제 해결의 실마리를 찾을 수 있다.
마무리
핵심 포인트
- 운영체제는 실행할 프로그램에 필요한 자원을 할당하고, 프로그램이 올바르게 실행되도록 돕는 특별한 프로그램이다.
- 운영체제와의 대화를 통해 하드웨어와 프로그램을 더 깊이 이해하고 문제 해결의 실마리를 찾을 수 있다.
09-2 운영체제의 큰 그림
시작하기 전에
운영체제에서 매우 중요한 개념인 커널에 대해 알아보고, 응용 프로그램이 운영체제로부터 어떻게 도움을 받으며 실행되는지를 이해하기 위해 이중 모드와 시스템 호출이란 개념을 알아본다.
운영체제의 심장, 커널
커널 : 운영체제의 핵심 서비스를 담당.
운영체제가 설치된 모든 기기에는 커널이 있다.
운영체제가 제공하는 서비스 중 커널이 미포함된 서비스도 있는데 대표적으로 사용자 인터페이스가 있다.
사용자 인터페이스 : 윈도우의 바탕화면과 같이 사용자가 컴퓨터와 상호작용할 수 있는 통로.
종류에는 그래픽 유저 인터페이스 : GUI, 커맨드 라인 인터페이스 : CLI가 있다.
이중 모드와 시스템 호출
이중 모드 : CPU가 명령어를 실행하는 모드를 크게 사용자 모드와 커널 모드로 구분하는 방식.
사용자 모드 : 운영체제 서비스를 제공받을 수 없는 실행 모드. 즉, 커널 영역에 실행할 수 없는 모드
커널 모드 : 운영체제 서비스를 제공받을 수 있는 실행 모드. 즉, 커널 영역의 코드를 실행할 수 있는 모드
시스템 호출(시스템 콜) : 운영체제 서비스를 제공받기 위한 요청
소프트웨어 인터럽트 : 입출력장치에 의해 발생하기도 하지만 인터럽트를 발생시키는 특정 명령어에 의해 발생하는 것.
** CPU가 시스템 호출을 처리하는 순서는 앞서 4장에 나온 인터럽트 처리 순서와 유사하다.
운영체제의 핵심 서비스
추후에 다룰 운영체제의 핵심 서비스는 프로세스 관리, 자원 접근 및 할당, 파일 시스템 관리 이다.
위 3개의 서비스는 10장, 11장, 15장에서 자세히 다룰 예정.
일단은 아래 기본 용어들만 알아두자.
프로세스 : 실행 중인 프로그램.
CPU 스케줄링 : 프로세스들에 공정하게 CPU를 할당하기 위해 어떤 프로세스로부터 CPU를 이용하게 할 것인지, 얼마나 오래 CPU를 이용하게 할지를 결정할 수 있어야 함을 뜻함.
시스템 호출의 종류
종류 | 시스템 호출 | 설명 |
프로세스 관리 | fork() | 새 자식 프로세스 생성 |
evecve() | 프로세스 실행 (메모리 공간을 새로운 프로그램의 내용으로 덮어씌움) |
|
exit() | 프로세스 종료 |
|
waitpid() | 자식 프로세스가 종료할 때까지 대기 | |
파일 관리 | open() | 파일 열기 |
close() | 파일 닫기 | |
read() | 파일 읽기 | |
write() | 파일 쓰기 | |
stat() | 파일 정보 획득 | |
디렉터리 관리 | chdir() | 작업 디렉토리 변경 |
mkdir() | 디렉터리 생성 | |
rmdir() | 비어있는 디렉터리 삭제 | |
파일 시스템 관리 | mount() | 파일 시스템 마운트 |
umount() | 파일 시스템 마운트 해제 |
마무리
핵심 포인트
- 커널은 운영체제의 핵심 기능을 담당한다.
- 이중 모드는 CPU가 명령어를 실행하는 모드를 커널 모드와 사용자 모드로 구분하는 방식.
- 시스템 호출은 운영체제의 서비슬르 제공받기 위해 커널 모드로 전환하는 방법.
- 대표적인 운영체제 서비스로 프로세스 관리, 자원 접근 및 할당, 파일 시스템 관리가 있다.
Chapter 10. 프로세스와 스레드
10-1 프로세스 개요
시작하기 전에
프로세스에 대해 알아보고 개념도 알아본다.
프로세스 직접 확인하기
포그라운드 프로세스 : 사용자가 보는 앞에서 실행되는 프로세스.
백그라운드 프로세스 : 사용자가 보지 못하는 뒤편에서 실행되는 프로세스.
데몬 : 유닉스 체계의 운영체제에서 백그라운드 프로세스를 뜻함.
서비스 : 윈도우 운영체제에서 백그라운드 프로세스를 뜻함.
프로세스 제어 블록
운영체제가 빠르게 번갈아 수행되는 프로세스의 실행 순서를 관리하고, 프로세스에 CPU를 비롯한 자원을 배분하는데 이때 프로세스 제어 블록 (PCB)를 이용한다.
PCB에 담기는 정보들.
프로세스 ID : 특정 프로세스를 식별하기 위해 부여하는 고유한 번호
레지스터 값, 프로세스 상태, CPU 스케줄링 정보, 메모리 관리 정보, 사용한 파일과 입출력장치 목록
문맥 교환
문맥 : 하나의 프로세스 수행을 재개하기 위해 기억해야 할 정보.
문맥 교환 : 기존 프로세스의 문맥을 PCB에 백업하고, 새로운 프로세스를 실행하기 위해 문맥을 PCB로부터 복구하여 새로운 프로세스를 실행하는 것.
프로세스의 메모리 영역
하나의 프로세스는 사용자 영역에 크게 코드 영역, 데이터 영역, 힙 영역, 스택 영역으로 나뉘어 저장된다.
코드 영역 : 텍스트 영역, 말 그대로 실행할 수 있는 코드(기계어로 이루어진 명령어)가 저장된다.
데이터 영역 : 잠깐 썼다가 없앨 데이터가 아닌 프로그램이 실행되는 동안 유지할 데이터가 저장되는 공간. 대표적으로 전역 변수.
12장에서 전역 변수에 대해 다룰 예정.
정적 할당 영역 : 크기가 고정된 영역
동적 할당 영역 : 프로세스 실행 과정에서 크기가 변할 수 있는 영역.
힙 영역 : 프로그램을 만드는 사용자, 즉 프로그래머가 직접 할당할 수 있는 저장 공간.
메모리 누수 : 메모리 공간을 반환하지 않는다면 할당한 공간은 메모리 내에 계속 남아 메모리 낭비를 초래하는 문제.
스택 영역 : 데이터를 일시적으로 저장하는 공간.
마무리
핵심 포인트
- 프로세스는 실행 중인 프로그램입니다. 프로세스의 종류에는 포그라운드 프로세스와 백그라운드 프로세스가 있다.
- 운영체제는 프로세스 제어 블록을 통해 여러 프로세스를 관리한다.
- 프로세스 간에 실행을 전환하는 것을 문맥 교환이라 한다.
- 프로세스 사용자 영역에 크게 코드 영역, 데이터 영역, 스택 영역, 힙 영역으로 나뉘어 배치된다.
10-2 프로세스 상태와 계층 구조
시작하기 전에
프로세스 계층 구조, 프로세스 상태에 알아보자.
프로세스 상태
프로세스의 상태를 표현하는 방식은 운영체제마다 조금씩의 차이는 있지만 대표적인 상태는 아래와 같다.
생성 상태 : 프로세스를 생성 중인 상태
준비 상태 : 당장 CPU를 할당받아 실행할 수 있지만, 아직 기다리고 있는 상태
준비 상태인 프로세스가 실행 상태로 전환되는 것을 디스패치라고 한다.
실행 상태 : CPU를 할당받아 실행 중인 상태
대기 상태 : 입출력장치의 작업을 기다리는 상태
종료 상태 : 프로세스가 종료된 상태.
프로세스 계층 구조
부모 프로세스 : 새 프로세스를 생성한 프로세스
자식 프로세스 : 부모 프로세스에 의해 생성된 프로세스
PPID : 자식 프로세스의 PCB에 부모 프로세스의 PID
프로세스 계층 구조
프로세스 생성 기법
fork : 자신의 복사본을 자식 프로세스로 생성
exec : 자신의 메모리 공간을 다른 프로그램으로 교체
이 둘은 시스템 호출이다.
마무리
핵심 포인트
- 프로세스 상태에는 생성, 준비, 실행, 대기, 종료가 있다.
- 프로세스가 다른 프로세스를 생성한 경우 프로세스를 생성한 프로세스를 부모 프로세스, 생성된 프로세스를 자식 프로세스라고 부른다.
- 많은 운영체제는 프로세스가 프로세스를 낳는 프로세스 계층 구조로 프로세스를 관리한다.
10-3 스레드
시작하기 전에
스레드가 의미하는지, 그리고 멀티스레드와 멀티프로세스의 차이가 무엇인지 알아본다.
프로세스와 스레드
스레드 : 프로세스를 구성하는 실행의 흐름 단위. 하나의 프로세스는 여러 개의 스레드를 가질 수 있다.
단일 스레드 프로세스 : 실행의 흐름 단위가 하나라는 점에서 이렇게 실행되는 프로세스.
프로세스의 스레드들은 실행에 필요한 최소한의 정보만을 유지한 채 프로세스 자원을 공유하며 실행된다.
멀티프로세스와 멀티스레드
멀티프로세스 : 여러 프로세스를 동시에 실행하는 것
멀티스레드 : 여러 스레드로 프로세스를 동시에 실행하는 것
스레드끼리는 프로세스 내의 자원을 공유한다.
마무리
- 스레드는 프로세스 내의 실행 흐름 단위
- 여러 프로세스를 동시에 실행하는 것을 멀티프로세스라 하고, 여러 스레드로 프로세스를 동시에 실행하는 것을 멀티스레드라 한다.
Chapter 11. CPU 스케줄링
11-1 CPU 스케줄링 개요
시작하기 전에
운영체제는 CPU를 어떻게 프로세스에 배분하는지 알아본다.
CPU 스케줄링 : 운영체제가 프로세스들에게 공정하고 합리적으로 CPU 자원을 배분하는 것.
프로세스 우선순위
입출력 집중 프로세스는 실행 상태보다는 입출력을 위한 대기 상태에 더 많이 머무르게 된다.
CPU 집중 프로세스는 대기 상태보다는 실행 상태에 더 많이 머무르게 된다.
스케줄링 큐
스케줄링 큐 : CPU를 사용하고 싶은 프로세스들, 메모리에 적재되고 싶은 프로세스들, 특정 입출력장치를 사용하고 싶은 프로세스들을 모두 줄세우는 것.
준비 큐 : CPU를 이용하고 싶은 프로세스들이 서는 줄을 의미
대기 큐 : 입출력장치를 이용하기 위해 대기 상태에 접어든 프로세스들이 서는 줄을 의미.
선점형과 비선점형 스케줄링
선점형 스케줄링 : 프로세스가 CPU를 비롯한 자원을 사용하고 있더라도 운영체제가 프로세스로부터 자원을 강제로 빼앗아 다른 프로세스에 할당할 수 있는 스케줄링 방식.
비선점형 스케줄링 : 하나의 프로세스가 자원을 사용하고 있다면 그 프로세스가 종료되거나 스스로 대기 상태에 접어들기 전까지 다른 프로세스가 끼어들 수 없는 스케줄링 방식을 의미한다.
마무리
- CPU 스케줄링은 공정하고 합리적으로 CPU 자원을 배분하는 방법을 의미한다.
- 프로세스는 우선순위를 가지고 있고, 이는 PCB에 명시된다.
- 운영체제는 효율적인 스케줄링을 위해 스케줄링 큐를 사용한다
- 준비 큐는 CPU 할당을 기다리는 프로세스들을 위한 큐를 의미
- 대기 큐는 입출력장치를 기다리는 프로세스들을 위한 큐를 의미.
- 선점형 스케줄링은 프로세스가 이용 중인 자원을 빼앗을 수 있다.
- 비선점형 스케줄링은 프로세스가 이용 중인 자원을 빼앗을 수 없다.
11-2 CPU 스케줄링 알고리즘
시작하기 전에
CPU 스케줄링 알고리즘의 종류는 매우 다양하고 운영체제 저마다 서로 다른 스케줄링 알고리즘을 사용하고 있는데 각 스케줄링의 알고리즘들의 작동 방식과 장단점을 이해해보자.
스케줄링 알고리즘의 종류
선입 선처리 스케줄링(=FCFS 스케줄링) : 단순히 준비 큐에 삽입된 순서대로 프로세스들을 처리하는 비선점형 스케줄링 방식.
공정해 보이지만, 프로세스들이 기다리는 시간이 매우 길어질 수 있는 부작용이 있다, 호위 효과가 있다.
최단 작업 우선 스케줄링(=SJF스케줄링) : 준비 큐에 삽입된 프로세스들 중 CPU이용 시간의 길이가 가장 짧은 프로세스부터 실행하는 스케줄링 방식
기본적으로 비선점형 스케줄링 알고리즘으로 분류되지만, 선점형으로 구현될 수도 있다.
선점형 최단 작업 우선 스케줄링이 최소 잔여 시간 우선 스케줄링이다.
라운드 로빈 스케줄링 : 선입 선처리 스케줄링에 타임 슬라이스라는 개념이 더해진 스케줄링 방식.
타임슬라이스 란 각 프로세스가 CPU를 사용할 수 있는 정해짘 시간을 의미한다.
즉, 라운드 로빈 스케줄링은 정해진 타임슬라이스 만큼의 시간동안 돌아가며 CPU를 이용하는 선점형 스케줄링이다.
최소 잔여 시간 우선 스케줄링(=SRT 스케줄링) : 최소 잔여 시간 우선 스케줄링은 최단작업우선스케줄링 알고리즘과 라운드로빈스케줄링 알고리즘을 합친 스케줄링 방식.
최소 잔여 시간 우선 스케줄링 하에서 프로세스들은 정해진 타임 슬라이스 만큼 CPU를 사용하되, CPU를 사용할 다음 프로세스로는 남아있는 작업시간이 가장 적은 프로세스가 선택된다.
우선순위 스케줄링 : 프로세스들에 우선순위를 부여하고, 가장 높은 우선순위를 가진 프로세스부터 실행하는 스케줄링 알고리즘.
단점으로 기아현상이 있다.
이를 방지하기 위한 대표적인 기법으로 에이징이 있다. 오랫동안 대기한 프로세스의 우선순위를 점차 높이는 방식.
다단계 큐 스케줄링 : 우선순위 스케줄링의 발전된 형태로, 우선순위별로 준비 큐를 여러개 사용하는 스케줄링 방식.
다단계 피드백 큐 스케줄링 : 다단계 큐 스케줄링의 발전된 형태.
다단계 큐 스케줄링과 달리 프로세스들이 큐 사이를 이동할 수 있어서, 낮은 우선순위 큐에서 너무 오래 기다리고 있는 프로세스가 있다면 점차 우선순위가 높은 큐로 이동시키는 에이징 기법을 적용하여 기아현상을 예방할 수 있다.
구현이 복잡하지만 가장 일반적인 CPU 스케줄링 알고리즘으로 알려져있다.
마무리
핵심 포인트
- 선입 선처리 스케줄링 알고리즘은 준비 큐에 삽입된 순서대로 CPU를 할당한다.
- 최단 작업 우선 스케줄링 알고리즘은 준비 큐에 삽입된 프로세스들 중 CPU 사용 시간의 길이가 가장 짧은 프로세스부터 CPU를 할당한다.
- 라운드 로빈 스케줄링 알고리즘은 정해진 시간만큼만 돌아가며 CPU를 할당한다.
- 우선순위 스케줄링 알고리즘은 가장 높은 우선순위를 가진 프로세스에 CPU를 할당한다.
- 다단계 피드백 큐 스케줄링 알고리즘은 프로세스들이 큐 사이를 이동할 수 있는 다단계 큐 스케줄링이다.
기본 미션
p.304 의 확인 문제 1번 풀고 인증하기
4주차 마무리.
이번주는 운영체제 파트를 시작하는 첫 주다.근데 개인적으로 시간 배분을 못해서 그런가... 다회독은 커녕 1회독 만 했다. 시간이 없어서 다시 읽고 정리하려니 부담이 돼서 1회독만 하고 정리를 끝냈다. ㅠ다음주는 시간 배분 잘해야 겠다. 선택미션도 해야하고... 아쉬운 4주차다.
'Book' 카테고리의 다른 글
[혼공컴운] 혼공학습단11기_6주차+기본미션 (0) | 2024.02.10 |
---|---|
[혼공컴운] 혼공학습단11기_5주차+기본미션 (3) | 2024.02.04 |
[혼공컴운] 혼공학습단11기_3주차+기본, 선택미션 (1) | 2024.01.21 |
[혼공컴운]혼공학습단11기_2주차+기본, 선택미션 (1) | 2024.01.14 |
[혼공컴운]혼공학습단11기_1주차+기본, 선택미션 (2) | 2024.01.07 |