more and more
[혼자 공부하는 컴퓨터구조 + 운영체제] 운영체제 섹션 9~11 본문
출처 : 인프런 개발자를 위한 컴퓨터공학 1: 혼자 공부하는 컴퓨터구조 + 운영체제 (강민철)
섹션 9. 운영체제 시작하기
섹션 10. 프로세스와 스레드
섹션11. CPU 스케줄링
9-1) 운영체제를 알아야 하는 이유
메모리 - 운영체제, 워드프로세서, 인터넷 브라우저, 메모장
운영체제 : CPU, 입출력장치, 파일시스템, 메모리 등을 관리함
--> 응용 프로그램에 필요한 자원을 제공하는 개념
운영체제 덕분에 개발자는 직접 하드웨어 코드를 조작할 필요가 없음
9-2) 운영체제의 큰 그림
운영체제는 굉장히 거대한 프로그램임
- 그 중에서도 핵심 서비스 : 커널(kernel) // 대부분 운영체제라 하면 커널을 의미함
(다만 유저 인터페이스는 운영체제이지만 커널에 속하지는 않음)
이중 모드
- 사용자 모드 : 자원에 접근 불가
- 커널 모드 : 운영체제의 서비스를 제공받을 수 있는 실행 모드(자원 접근도 가능)
-> 시스템 호출을 하게 되면 커널 모드로 전환함(운영체제의 도움을 받기 위해)
시스템 호출 : 일종의 소프트웨어 인터럽트 (시스템호출 -> 운영체제 코드 실행 -> 시스템 호출 복귀)
핵심 서비스
a. 프로세스 관리 : 동시에 생성, 실행, 삭제되는 프로세스를 관리 (어떻게 관리하는지 --> 섹션 10)
프로세스 = 실행중인 프로그램
b. 자원 접근 및 할당
- CPU 접근 및 할당 : CPU 스케줄링(어떤 프로세스를 먼저, 얼마나 실행?)
- 메모리 접근 및 할당 : 페이징 / 스와핑
- 입출력장치 접근 및 할당 : 인터럽트 서비스 루틴
c. 파일 시스템 관리
- 정보를 파일 단위로 보관하고, 파일은 폴더 단위로 보관
섹션 9. 운영체제 시작하기
섹션 10. 프로세스와 스레드
섹션 11. CPU 스케줄링
10-1) 프로세스 개요
포그라운드 / 백그라운드 프로세스
프로세스는 한정된 시간 만큼만 CPU를 이용 / 타이머 인터럽트 - 차례가 넘어감
(실행하던 프로세스는 실행 재개를 위해 레지스터 값을 저장해둠)
--> 프로세스 제어 블록(PCB) : 프로세스 관련 정보를 저장한 자료구조 - 프로세스 종료시 폐기됨
ex) 프로세스 ID, 레지스터 값, 프로세스 사태, CPU 스케줄링 정보, 메모리 정보, 사용한 파일과 입출력장치 정보
프로세스 순서가 넘어갈 때?
- 프로세스 A는 지금까지의 중간 정보를 백업 --> 이 중간 정보가 문맥
- 프로세스 B의 문맥을 가져옴(복구)
--> 이 과정이 문맥 교환(context switching)
프로세스- 커널영역에는 PCB로 저장,
사용자영역에는?
a. 코드 영역 : read only / 코드, 기계어로 이루어진 명령어 저장
b. 데이터 영역 : 프로그램이 실행하는 동안 유지할 데이터(전역 변수)
c. 힙 영역 : 사용자(프로그래머)가 직접 할당할 수 있는 저장 공간
- 낮은 주소에서 높은 주소로 할당
d. 스택 영역 : 데이터가 일시적으로 저장되는 공간 (매개 변수, 지역 변수)
- 높은 주소에서 낮은 주소로 할당
10-2) 프로세스 상태와 계층 구조
프로세스 상태 : 생성 - 준비 -(디스패치)-> 실행 -(입출력 요청)-> 대기 - 종료
준비 <-(타이머 인터럽트)- 실행
준비 <-(입출력 완료)- 대기
프로세스 계층 구조 : 부모(새 프로세스 생성) - 자식 프로세스(부모 프로세스에 의해 생성된 프로세스)
--> 별개의 PID를 가짐
프로세스 생성기법 : 복제 / 옷 갈아입기 ((window는 해당 x))
a. 부모 프로세스 : fork 시스템 호출로 자신의 복사본인 자식 프로세스 생성
b. 자식 프로세스 : exec 시스템 호출로 메모리 공간을 새로운 프로그램으로 덮어씌움
10-3) 스레드
스레드 = 프로세스를 구성하는 실행 흐름의 단위
- 스레드 ID, 프로그램 카운터, 스택
- 프로세스를 구성하는 스레드들은 한 프로그램 내에서 같은 영역에 있으므로 자원을 공유함
멀티 프로세스(단일 스레드의 프로세스 여러 개) vs 멀티 스레드
a. 멀티 프로세스 : 독립적으로 실행됨(프로세스끼리 자원을 공유하려면 통신을 해야함-IPC)
b. 멀티 스레드 : 자원을 공유하므로 협력, 통신에 유리
섹션 9. 운영체제 시작하기
섹션 10. 프로세스와 스레드
섹션 11. CPU 스케줄링
11-1) CPU 스케줄링 개요
CPU 스케줄링 : 운영체제가 프로세스들에게 CPU 자원을 배분하는 것
-> 프로세스 우선순위에 따라
ex) 입출력 작업이 많은 프로세스의 우선위 > CPU 작업이 많은 프로세스의 우선순위 (잠깐만 대기하면 쭉 쓸 수 있어서?)
스케줄링 큐
a. 준비큐(준비상태) : CPU를 이용하기 위해 기다리는 줄
b. 대기큐(대기상태) : 입출력장치를 이용하기 위해 기다리는 줄
- 같은 장치를 기다리는 프로세스는 같은 큐에서 대기 -> 준비큐
CPU가 이미 사용중일 때? 선점형 스케줄링 VS 비선점형 스케줄링
a. 선점형 : 이미 어떤 프로세스가 CPU를 사용할 수 있어도 다른 프로세스가 선점할 수 있는 스케줄링
- 특정 프로세스의 자원 독점을 방지
- 문맥 교환이 자주 일어나 오버헤드 발생할 가능성이 높아짐
b. 비선점형 : CPU를 사용중인 프로세스가 끝나거나 대기상태가 될 때까지 다른 프로세스가 선점할 수 없는 스케줄링
11-2) CPU 스케줄링 알고리즘
1. 선입 선처리 스케줄링(FCFS)
- 준비 큐에 산입된 순서대로 처리하는 비선점 스케줄링
- 프로세스들이 기다리는 시간이 매우 길어질 수 있음 = 호위 효과
2. 최단 작업 우선 스케줄링
3. 라운드 로빈 스케줄링(RR)
- 선입 선처리 스케줄링 + 타임 슬라이스
- 타임 슬라이스의 크기가 중요(너무 크면 호위 효과가 발생할 수 O)
4. 최소 잔여시간 우선 스케줄링(SRT)
- 최단 작업 우선 + 라운드 로빈 스케줄링
- 정해진 시간만큼 CPU를 이용하되, 그 다음 차례는 남은 작업시간이 가장 적은 프로세스 선택
5. 우선순위 스케줄링
- 우선순위를 부여해 우선순위 대로 실행
- 우선순위가 같다면 선입 선처리로 스케줄링
- 우선순위가 높은 프로세스만 실행하게 되면 우선순위가 낮은 프로세스는 결국 실행이 안됨 = 기아 현상
- 기아 현상 방지 : 에이징(오랫동안 대기한 프로세스의 우선순위를 점차 높이는 방식)
6. 다단계 큐 스케줄링
- 우선순위 스케줄링의 발전된 형태
- 우선순위 별로 여러개의 준비 큐를 사용(큐가 여러개이므로 스케줄링을 달리 설정할 수 있게 됨)
- 우선순위 0 실행하고 1 실행하고 2 실행하면 됨
- 하지만 기아 현상은 여전히 발생할 수 있음
7. 다단계 피드백 큐 스케줄링(가장 일반적)
- 다단계 큐 + 큐 간 이동이 가능
- 먼저 실행된 프로세스가 타임슬라이스 동안 실행이 끝나지 않으면 낮은 우선순위의 큐 이동
- 낮은 우선순위 큐에서 대기하던 프로세스에 에이징을 적용할 수 있음
'컴퓨터 공학 > 운영체제' 카테고리의 다른 글
| [혼자 공부하는 컴퓨터구조 + 운영체제] 운영체제 섹션 12~15 (0) | 2023.08.03 |
|---|---|
| [혼자 공부하는 컴퓨터구조 + 운영체제] 컴퓨터 구조 섹션 6~8 (0) | 2023.07.25 |
| [혼자 공부하는 컴퓨터구조 + 운영체제] 컴퓨터 구조 섹션 4~5 (0) | 2023.07.17 |
| [혼자 공부하는 컴퓨터구조 + 운영체제] 컴퓨터 구조 섹션 1~3 (0) | 2023.07.16 |