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
'CS > 혼공컴구운체' 카테고리의 다른 글
[혼공컴운] 혼공단 6주차: 14~15 (1) | 2024.02.17 |
---|---|
[혼공컴운] 혼공단 5주차: 12~13 (1) | 2024.02.04 |
[혼공컴운] 혼공단 3주차: 06~08 (2) | 2024.01.21 |
[혼공컴운] 혼공단 2주차: 04~05 (0) | 2024.01.14 |
[혼공컴운] 혼공단 1주차: 01 ~ 03 (0) | 2024.01.07 |
댓글