more and more

[혼자 공부하는 컴퓨터구조 + 운영체제] 운영체제 섹션 9~11 본문

컴퓨터 공학/운영체제

[혼자 공부하는 컴퓨터구조 + 운영체제] 운영체제 섹션 9~11

지모어 2023. 7. 30. 11:59

출처 : 인프런 개발자를 위한 컴퓨터공학 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. 다단계 피드백 큐 스케줄링(가장 일반적)

- 다단계 큐 + 큐 간 이동이 가능

- 먼저 실행된 프로세스가 타임슬라이스 동안 실행이 끝나지 않으면 낮은 우선순위의 큐 이동

- 낮은 우선순위 큐에서 대기하던 프로세스에 에이징을 적용할 수 있음 

Comments