본문 바로가기
CS/혼공컴구운체

[혼공컴운] 혼공단 4주차: 09~11

by 동백05 2024. 1. 28.

09 운영체제 시작하기

09-1 운영체제를 알아야하는 이유

시스템 자원

- 프로그램 실행에 마땅히 필요한 요소

 

운영체제

- 실행할 프로그램에 필요한 자원을 할당하고, 프로그램이 올바르게 실행되도록 돕는 특병한프로그램

- 여느 프로그램과 마찬가지로 메모리에 적재되어야함

- 항상 컴퓨터가 부팅될 때 메모리 내 커널 영역이라는 공간에 따로 적재되어 실행됨

- 사용자영역: 커널 영역을 제외한 나머지 영역, 사용자가 이용하는 응용 프로그램이 적재되는 영역

- 운영체제는 커널 영역에 적재되어 사용자 영역에 적재된 프로그램들에 자원을 할당하고 이들이 올바르게 실행되도록 도움

09-2 운영체제의 큰 그림

커널

- 운영체제의 핵심 서비스를 담당하는 부분

- 운영체제가 설치된 모든 기기에는 커널이 있음

- 사용자 인터페이스: 운영체제가 제공하는 서비스 중 커널에 포함되지 않는 서비스, 그래픽 유저 인터페이스/커맨드 라인 인터페이스

 

이중모드

- CPU가 명령어를 실행하는 모드를 크게 사용자 모드와 커널 모드로 구분하는 방식

- 사용자모드: 운영체제 서비스를 제공받을 수 없는 실행 모드, 커널 영역의 코드 실행 못함

- 커널모드: 운영체제 서비스를 제공받을 수 있는 실행 모드, 커널 영역의 코드를 실행할 수 있음

 

시스템호출

- 운영체제 서비스를 제공받기 위한 요청

- 사용자 모드로 실행되는 프로그램은 시스템 호출을 통해 커널 모드로 전환하여 운영체제 서비스를 제공받을 수 있음

- 일종의 인터럽트

 

운영체제의 핵심 서비스

1) 프로세스 관리

- 프로세스: 실행 중인 프로그램

- 하나의 CPU는 한 번에 하나의 프로세스만 실행할 수 있기에 CPU는 이 프로세스들을 조금씩 번갈아 가며 실행함

2) 자원 접근 및 할당

- 프로세스들이 사용할 자원에 접근하고 조작함으로써 프로세스에 필요한 자원을 할당함

- CPU 스케줄링: 어떤 프로세스부터 CPU를 이용하게 할 것인지, 얼마나 오래 CPU를 이용하게 할지를 결정할 수 있어야 한다

3) 파일 시스템 관리

10 프로세스와 스레드

10-1 프로세스 개요

포그라운드 프로세스

- 사용자가 보는 앞에서 실행되는 프로세스

백그라운드 프로세스

- 사용자가 보지 못하는 뒤에서 실행되는 프로세스

- 데몬(유닉스 체계), 서비스(윈도우)

 

프로세스 제어 블록 PCB

- 빠르게 번갈아 수행되는 프로세스의 실행 순서를 관리하고, 프로세스에 CPU를 비롯한 자원을 배분할 때 이용

- 프로세스와 관련된 정보를 저장하는 자료 구조

- 프로세스 생성 시에 만들어지고 실행이 끝나면 폐기

- 프로세스ID: 특정 프로세스를 식별하기 위해 부여하는 고유 번호

- 레지스터 값: 자신의 차례가 돌아오면 이전까지 사용했던 레지스터의 중간값들을 모두 복원

- 프로세스 상태: 현재 프로세스가 어떤 상태인가

- CPU 스케줄링 정보: 프로세스가 언제, 어떤 순서로 CPU를 할당받을지에 대한 정보

- 메모리 관리 정보: 프로세스가 어느 주소에 저장되어 있는지

- 사용한 파일과 입출력장치 목록: 프로세스가 실행 과정에서 특정 입출력장치나 파일을 사용하면 PCB에 해당 내용이 명시됨

 

문맥교환

- 문맥: 중간정보, 하나의 프로세스 수행을 재개하기 위해 기억해야 할 정보, PCB에 기록되어 있는 정보들

- 기존 프로세스의 문맥을 PCB에 백업하고, 새로운 프로세스를 실행하기 위해 문맥을 PCB로부터 복구하여 새로운 프로세스를 실행하는 것

- 여러 프로세스가 끊임없이 빠르게 번갈아 가며 실행되는 원리

 

프로세스의 메모리 영역

- 정적 할당 영역: 크기가 변하지 않음

1) 코드 영역

    - 실행할 수 있는 코드, 즉 기계어

    - 쓰기 금지, 읽기 전용

2) 데이터 영역

    - 잠깐 썼다가 없앨 데이터가 아닌 프로그램이 실행되는 동안 유지할 데이터가 저장되는 공간

    - 예) 전역변수

- 동적 할당 영역: 프로세스 실행 과정에서 그 크기가 변할 수 있는 영역

1) 힙 영역

    - 사용자, 즉 프로그래머가 직접 할당할 수 있는 저장 공간

    - 프로그래밍 과정에서 힙 영역에 메모리 공간을 할당했다면 언젠가는 해당공간을 반환해야함

    - 메모리 누수: 메모리 공간을 반환하지 않아 할당한 공간이 메모리에 계속 남아 메모리 낭비를 초래하는 것

    - 메모리의 낮은 주소에서 높은 주소로 할당

2) 스택 영역

    - 데이터를 일시적으로 저장하는 곳

    - 예) 매개변수, 지역변수

    - 메모리의 높은 주소에서 낮은 주소로 할당

10-2 프로세스 상태와 계층 구조

프로세스 상태

1) 생성 상태

- 프로세스를 생성 중인 상태

- 이제 막 메모리에 적재되어 PCB를 할당받은 상태

2) 준비 상태

- 당장이라도 CPU를 할당받아 실행할 수 있지만, 아직 자신의 차례가 아니기에 기다리고 있는 상태

3) 실행 상태

- CPU를 할당받아 실행 중인 상태

- 할당된 일정 시간 동안만 CPU를 사용할 수 있음

4) 대기 상태

- 입출력장치의 작업을 기다리는 상태

- 입출력 작업이 완료되면 해당 프로세스는 다시 준비 상태로 CPU 할당을 기다림

5) 종료 상태

- 프로세스가 종료된 상태

 

프로세스 다이어 그램

 

 

프로세스 계층 구조

- 부모 프로세스: 새 프로세스를 생성한 프로세스

- 자식 프로세스: 부모 프로세스에 의해 생성된 프로세스

- 부모 프로세스와 자식 프로세스느 엄연히 다른 프로세스이기에 각기 다른 PID를 가짐

 

프로세스 생성 기법

1) fork

- 자신의 복사본을 자식 프로세스로 생성

- 시스템 호출

- 부모 프로세스의 자원인 메모리 내의 내용, 열린 파일의 목록 등이 자식 프로세스에 상속됨

- PID 값이나 저장된 메모리 위치는 다름

2) exec

- 자신의 메모리 공간을 다른 프로그램으로 교체

- 자신의 메모리 공간을 새로운 프로그램으로 덮어쓰는 시스템 호출

 

[ 기본 미션 ]
1. 다음은 프로세스 상태를 보여주는 프로세스 상태 다이어그램입니다. 1부터 5까지 올바른 상태를 적어 보세요.

(1) 생성 상태
(2) 준비 상태
(3) 실행 상태
(4) 종료 상태
(5) 대기 상태

10-3 스레드

스레드

- 프로세스를 구성하는 실행의 흐름 단위

- 하나의 프로세스느 여러 개의 스레드를 가질 수 있음

- 프로세스의 스레드들은 실행에 필요한 최소한의 정보만을 유지한 채 프로세스 자원을 공유하며 실행됨

 

멀티 프로세스

- 여러 프로세스를 동시에 실행하는 것

멀티스레드

- 여러 스레드로 프로세스를 동시에 실행하는 것

 

- 프로세스끼리는 기본적으로 자원을 공유하지 않지만, 스레드끼리는 같은 프로세스 내의 자원을 공유함

- 여러 프로세스를 병행 실행하는 것보다 메모리를 더 효율적으로 사용가능

- 서로 다른 프로세스들은 기본적으로 자원을 공유하지 않기 때문에 서로가 남남처럼 독립적으로 실행되는 반면, 스레드는 프로세스의 자원을 공유하기 때문에 서로 협력과 통신에 유리함

- 멀티프로세스 환경에서는 하나의 프로세스에 문제가 생겨도 다른 프로세스에느 지장이 적거나 없지만, 멀티스레드 환경에서는 하나의 스레드에 문제가 생기면 프로세스 전체에 문제가 생길 수 있음

11 CPU 스케줄링

11-1 CPU 스케줄링 개요

CPU 스케줄링

- 운영체제가 프로세스들에게 공정하고 합리적인 CPU 자원을 배분하는 것

 

선점형 프로세스

- 프로세스가 CPU를 비롯한 자원을 사용하고 있더라도 운영체제가 프로세스로부터 자원을 강제로 빼앗아 다른 프로세스에 할당할 수 있는 스케줄링 방식

- 어느 한 프로세스의 자원 독점을 막고 프로세스들이 골고루 자원을 배분할 수 있음

- 문맥 교환 과정에서 오버헤드가 발생할 수 있음

 

비선점형 프로세스

- 하나의 프로세스가 자원을 사용하고 있다면 그 프로세스가종료되거나 스스로 대기 상태에 접어들기 전까진 다른 프로세스가 끼어들 수 없는 스케줄링

- 문맥 교환에서 발생하는 오버헤드는 선점형 프로세스보다 적음

- 모든 프로세스가 골고루 자원을 사용할 수 없음

 

11-2 CPU 스케줄링 알고리즘

선입 선처리 스케줄링

 - FCFS 스케줄링

- 준비 큐에 삽입된 순서대로 프로세스들을 처리하는 비선점형 스케줄링 방식

- 호위효과: 다른 프로세스가 앞선 프로세스가 CPU를 사용하는 동안 기다리는 것

 

최단 작업 우선 스케줄링

- SJF 스케줄링

- 준비큐에 삽입된 프로세스들 중 CPU 이용 시간의 길이가 가장 짧은 프로세스부터 실행

 

라운드 로빈 스케줄링

- 선입 선처리 스케줄링에 타임 슬라이스 개념이 더해진 스케줄링 방식

- 타임 슬라이스: 각 프로세스가 CPU를 사용할 수 있는 정해진 시간

- 정해진 시간을 모두 사용하였음에도 아직 프로세스가 완료되지 않았다면 다시 큐의 맨 뒤에 삽입

- 타임 슬라이스 크기가 매우 중요

 

최소 잔여 시간 우선 스케줄링

- SRT 스케줄링

- 정해진 타임 슬라이스만큼 CPU를 사용하되, CPU를 사용할 다음 프로세스로는 남아있는 작업 시간이 가장 적은 프로세스가 선택됨

 

우선순위 스케줄링

- 프로세스에 우선순위를 부여하고, 가장 높은 우선순위를 가진 프로세스부터 실행하는 스케줄링 알고리즘

- 기아 현상: 우선 순위가 낮은 프로세스는 우선순위가 높은 프로세스들에 의해 실행이 계속해서 연기될 수 있음

- 에이징: 오랫동안 대기한 프로세스의 우선순위를 점차 높이는 방식

 

다단계 큐 스케줄링

- 우선순위별로 준비 큐를 여러 개 사용하는 스케줄링 방식

- 프로세스 유형별로 우선순위를 구분하여 실행하는 것이 편리해짐

 

다단계 피드백 큐 스케줄링

- 프로세스들이 큐 사이를 이동할 수 있음

- CPU를 오래 사용해야 하는 프로세스는 점차 우선순위가 낮아짐

- 가장 일반적인 CPU 스케줄링 알고리즘

 

[ 선택 미션 ]
Q) 큐에 A,B,C,D 순으로 프로세스가 삽입되었을 때 선입선출 스케줄링 시 CPU 할당 순서는?
큐에 ABCD 순서로 들어가고 선입선출 스케줄링은 먼저 들어온 프로세스가 먼저 할당되기 때문에 ABCD 순서로 CPU에 할당된다
A) A,B,C,D

댓글