✏️ 4주차 진도: Chapter 09 ~ 11
- 기본 숙제(필수): p. 304의 확인 문제 1번 풀고 인증하기
- 추가 숙제(선택): Ch.11(11-2) 준비 큐에 A,B,C,D 순으로 삽입되었다고 가정했을 때, 선입 선처리 스케줄링 알고리즘을 적용하면 어떤 프로세스 순서대로 CPU를 할당받는지 풀어보기
하드웨어를 조작하고 관리하는 기능을 대신 해주는 운영체제를 잘 알아야 오류가 났을 때 오류 메시지를 잘 이해할 수 있고 프로그램을 효율적으로 관리할 수 있다!
실행할 프로그램에 시스템 자원을 적절히 할당하고, 프로그램이 올바르게 실행되도록 돕는 프로그램
메모리는 커널 영역과 사용자 영역으로 나뉘는데, 운영체제는 항상 커널 영역에 적재되어 실행된다.(커널이 있는 영역이라 커널 영역) 사용자 영역에는 주로 응용 프로그램이 적재된다.
운영체제의 핵심 서비스를 담당하는 부분
어떤 커널을 사용하는지에 따라 컴퓨터 전체의 성능도 달라질 수 있다.
운영체제가 제공하는 서비스 중 커널에 포함되지 않는 서비스 중 하나
윈도우 바탕화면처럼 사용자가 컴퓨터와 상호작용할 수 있는 통로! 그 종류에는 GUI와 CLI가 있다.
응용 프로그램은 직접 자원에 접근할 수 없고, 오직 운영체제를 통해서만 접근이 가능하다. CPU는 명령어를 사용자 모드와 커널 모드로 나누어서 이러한 작업을 실행한다.(플래그 레지스터의 슈퍼바이저 플래그를 통해 이를 구분한다.)
사용자 모드
커널 영역의 코드를 실행할 수 없는 모드. 일반적인 응용 프로그램은 기본적으로 사용자 모드로 실행된다.
커널 모드
커널 영역의 코드를 실행할 수 있는 모드. 운영체제는 커널 모드로 실행되기 때문에 자원에 접근할 수 있다.
사용자 모드로 실행되는 프로그램이 운영체제를 통해 자원에 접근하려면 운영체제에 요청을 보내 커널 모드로 전환되어야 한다. 이때 이 요청을 시스템 호출(system call)이라고 한다.
프로세스 관리
프로세스(실행 중인 프로그램)들이 적절히 번갈아가면서 실행될 수 있도록 관리
자원 접근 및 할당
프로세스들에게 공정하게 CPU 할당, 새로운 프로세스에게 메모리 할당, 메모리 부족할 경우 해결, 입출력 작업 수행
파일 시스템 관리
데이터를 파일과 디렉터리로 관리
보조 기억 장치에 저장된 프로그램을 메모리에 적재하고 실행하는 순간 해당 프로그램은 프로세스가 된다. -> 프로세스를 생성한다.
포그라운드 프로세스
사용자가 볼 수 있는 공간에서 실행되는 프로세스
백그라운드 프로세스
사용자가 보지 못하는 공간에서 실행되는 프로세스
백그라운드 프로세스 중, 사용자와 직접 상호작용하지 않는 프로세스를 데몬 또는 서비스라고 부른다.
프로세스와 관련된 정보를 저장하는 자료 구조
프로세스의 실행 순서를 관리하고, 프로세스에 자원을 배분하기 위해 운영체제는 PCB에 적혀 있는 정보들로 프로세스를 식별한다. PCB는 프로세스 생성 시에 커널 영역에 생성되고, 실행이 끝나면 폐기된다.
프로세스 ID (PID)
프로세스를 식별하기 위해 부여하는 고유한 번호. PID는 프로그램을 실행할 때마다 달라진다.
레지스터 값
이전까지 진행했던 작업들을 그대로 이어 실행하기 위해 이전에 사용했던 레지스터 값을 저장해놓는다.
프로세스 상태
CPU 이용 중인지, 대기 중인지 등등
메모리 관리 정보
프로세스가 어느 주소에 저장되어 있는지에 대한 정보(베이스 레지스터, 한계 레지스터, 페이지 테이블 정보)
사용한 파일과 입출력장치 목록
기존 프로세스의 context를 PCB에 백업하고 새로운 프로세스를 실행하기 위해 문맥을 PCB로부터 복구해서 새로운 프로세스를 시작하는 것
프로세스 수행을 재개하기 위해 기억해야 할 정보
PCB에 잘 기록되어 있다.
하나의 프로세스는 사용자 영역에 크게 코드 영역, 데이터 영역, 힙 영역, 스택 영역으로 나뉘어 저장된다.
코드 영역(텍스트 영역)
기계어로 이루어진 명령어가 저장. 읽기 전용.
데이터 영역
프로그램이 실행되는 동안 유지할 데이터(전역 변수) 저장.
힙 영역
프로그래머가 직접 할당할 수 있는 저장 공간.
메모리의 낮은 주소에서 높은 주소로 할당된다.(아래에서 위로 자란다)
힙 영역에 메모리 공간을 할당했다면 언젠가는 해당 공간을 반환해야 한다. 그러지 않으면 메모리 낭비(메모리 누수)
C 에서 동적 배열을 만들 때, 마지막에 해제를 해야 하는 이유!
스택 영역
데이터를 일시적으로 저장하는 공간 (매개 변수, 지역 변수)
메모리의 높은 주소에서 낮은 주소로 할당된다.(위에서 아래로 자라난다.)
프로세스는 실행 도중 시스템 호출을 통해 다른 프로세스를 생성할 수 있다.
새 프로세스를 생성한 프로세스 -> 부모 프로세스
부모 프로세스에 의해 생성된 프로세스 -> 자식 프로세스
부모 프로세스와 자식 프로세스들을 트리 구조로 나열한 것을 프로세스 계층 구조라고 한다.
부모 프로세스가 자신의 복사본을 자식 프로세스로 생성해내는 시스템 호출(상속)
복사된 자신 프로세스가 자신의 메모리 공간을 다른 프로그램으로 교체하는 시스템 호출
프로세스를 구성하는 실행의 흐름 단위
한 프로세스의 스레드들은 프로세스의 자원을 공유한다.
최근 많은 OS는 CPU에 처리할 작업을 전달할 때 스레드 단위로 전달한다.(단, 리눅스는 프로세스와 스레드를 통일하여 task라는 이름으로 사용한다.)
한 번에 하나의 명령어만 처리하는 프로세스
여러 프로세스를 동시에 실행하는 것
단일 스레드 프로세스를 여러 개 동시에 실행
여러 스레드로 하나의 프로세스를 동시에 실행하는 것
프로세스의 우선 순위에 따라 CPU 자원을 할당하는 방법
자원을 사용하고 싶어하는 프로세스들을 줄 세우는 곳. 꼭 선입선출이 아닐 수도 있다!
프로세스가 이미 자원을 사용하고 있는 중이어도,그 자원을 빼앗아 다른 프로세스에게 할당할 수 있는 스케줄링
프로세스들에게 골고루 자원을 분배할 수 있지만, context switching에서 오버헤드가 발생할 수 있다.
프로세스가 이미 자원을 사용하고 있는 중이라면, 그 자원을 중간에 빼앗아 다른 프로세스에게 할당할 수 없는 스케줄링
context switching에서 발생하는 오버헤드가 적지만, 프로세스들에게 골고루 자원을 분배하기 어렵다.
준비 큐에 삼입된 순서대로 CPU를 할당하는 비선점형 스케줄링
convoy effect: CPU를 오래 사용하는 프로세스가 먼저 준비 큐에 도착하여, 다른 프로세스가 CPU를 사용하기 위해 너무 오래 기다려야 하는 현상
준비 큐에 삽입된 프로세스들 중 CPU 이용 시간의 길이가 가장 짧은 프로세스부터 CPU를 할당하는 비선점형 스케줄링
FCFS 스케줄링 + 타임 슬라이스(각 프로세스가 PCU를 사용할 수 있는 정해진 시간)
SJF + Round Robin Scheduling
정해진 타임 슬라이스만큼 CPU를 사용하되, CPU를 사용할 다음 프로세스로는 남아있는 작업 시간이 가장 적은 프로세스가 선택된다.
프로세스들에 우선순위를 부여하고, 가장 높은 우선순위를 가진 프로세스부터 실행하는 스케줄링.
우선순위별로 준비 큐를 여러 개 사용하는 스케줄링 방식.
우선순위가 가장 높은 큐에 있는 프로세스들을 먼저 처리한다.
큐 마다 다른 타임 슬라이스, 다른 스케줄링 알고리즘을 사용할 수 있다.
다단계 큐 스케줄링 + 프로세스들이 큐 사이를 이동할 수 있다. CPU를 오래 사용해야 하는 프로세스는 점차 우선순위가 낮은 큐로 이동하게 된다. 또한, 어떤 프로세스가 낮은 우선순위 큐에서 너무 오래 기다린다면 높은 우선순위 큐로 이동시킬 수도 있다.
다음은 프로세스 상태를 보여주는 프로세스 상태 다이어그램입니다. 1부터 5까지 올바른 상태를 적어보세요.
1: 생성 상태, 2: 준비 상태, 3: 실행 상태, 4: 종료 상태, 5: 대기 상태
선입 선처리 스케줄링은 준비 큐에 들어오는 순서대로, 앞의 프로세스가 CPU를 모두 사용할 때까지 기다린 다음에 다른 프로세스에게 CPU를 할당한다. 따라서, A,B,C,D 순으로 CPU를 할당받게 된다.