9장. 운영체제 시작하기
09-1. 운영체제를 알아야 하는이유
운영체제란
- 시스템 자원 : 프로그램 실행에 필요한 요소(자원)
- CPU, 메모리, 보조기억장치, 입출력장치 등과 같은 컴퓨터 부품
- 모든 프로그램은 실행되기 위해 반드시 자원이 필요하다.
- 입출력장치 관리 : 복수의 프로그램이 입출력 장치 동시 접근 방지
- 운영체제
- 실행할 프로그램에 필요한 자원을 할당하고, 프로그램이 올바르게 실행되도록 돕는 특별한 프로그램
- 항상 컴퓨터가 부팅될 때 메모리 내 커널 영역이라는 공간에 따로 적재되어 실행된다.
- 사용자 영역 : 커널영역을 제외한 나머지 영역, 사용자가 이용하는 응용 프로그램이 적재되는 영역
운영체제를 알아야 하는 이유
- 운영체제가 없다면 아무리 간단한 프로그램이라도 하드웨어를 조작하는 코드를 개발자가 모두 직접 작성
- 운영체제와의 대화로 하드웨어와 프로그램을 더 깊이 이해 가능.
09-2. 운영체제의 큰 그림
운영체제의 심장, 커널
- 커널
- 운영체에의 핵심 서비스를 담당하는 부분
- 핵심 서비스 : 자원에 접근하고 조작하는 기능, 프로그램이 올바르고 안전하게 실행되게 하는 기능 등
- 운영체제가 설치된 모든 기기에는 커널이 있다.
- 사용자 인터페이스 : 운영체제가 제공하는 서비스 중 커널에 포함되지 않는 서비스
- 윈도우의 바탕화면과 같이 사용자가 컴퓨터와 상호작용할 수 있는 통로
- 그래픽 유저 인터페이스 : 그래픽을 기반으로 컴퓨터와 상호작용할 수 있는 인터페이스
- 커맨드 라인 인터페이스 : 명령어를 기반으로 컴퓨터와 상호작용할 수 있는 인터페이스
- 운영체에의 핵심 서비스를 담당하는 부분
이중 모드와 시스템 호출
- 운영체제는 사용자가 실행하는 응용 프로그램이 하드웨어 자원에 직접 접근하는 것을 방지하여 자원을 보호합니다.
- 응용 프로그램들이 자원에 접근하려고 할 때 오직 자신을 통해서만 접근하도록하여 자원을 보호합니다.
- 이중모드 (Dual mode)
- CPU가 명령어를 실행하는 모드를 크게 사용자 모드와 커널 모드로 구분하는 형식
- 사용자 모드(User mode) : 운영체제 서비스를 제공받을 수 없는 실행 모드
- 커널 영역의 코드를 실행할 수 없는 모드
- 일반적인 응용 프로그램
- 입출력 명령어를 포함하여 하드웨어 자원에 접근하여 명령어 실행 불가
- 커널 모드(Keneral mode) : 운영체제 서비스를 제공받을 수 있는 실행 모드
- 커널 영역의 코드를 실행할 수 있는 모드
- 시스템 자원에 접근 가능
- 시스템 호출
- 사용자 모드로 실행중인 프로그램이 운영체제 서비스를 받기 위해 운영체제에 보내는 요청
- 커널 모드로 전환하여 운영체제 서비스를 제공받을 수 있다.
- 소프트웨어 인터럽트 : 인터럽트를 발생시키는 특정 명령어에 의해 발생
운영체제의 핵심 서비스
- 프로세스 관리
- 프로세스 : 실행중인 프로그램
- 일반적으로 하나의 CPU는 한번에 하나의 프로세스만 실행할 수 있기에 CPU는 이 프로세스들을 조금씩 번갈아 가며 실행
- 자원 접근 및 할당
- 운영체제는 프로세스들이 사용할 자원에 접근하고 조작함으로써 프로세스에 필요한 자원을 할당해 줍니다.
- CPU
- CPU 스케줄링
- 메모리
- 어느 주소에 프로세스를 적재할지 결정
- 입출력 장치
- 인터럽트 서비스 루팅 제공
- 파일 시스템 관리
가상 머신과 이중 모드의 발전
- 가상 머신
- 소프트웨어적으로 만들어낸 가상 컴퓨터
- 새로운 운영체제과 응용 프로그램을 설치하고 실행할 수 있다.
시스템 호출의 종류
- 시스템 호출
- 운영체제 서비스를 제공받기 위한 방법
- 운영체제 서비스를 제공받기 위한 방법
10. 프로세스와 스레드
10-1. 프로세스 개요
일반적으로 실행 중인 프로그램을 프로세스(Process)라고 한다.
윈도우 프로세스에서는 포그라운드 프로세스(Foreground Process), 백그라운드 프로세스(Background Process) 2가지를 확인할 수 있다.
- 포그라운드 프로세스
사용자가 확인할 수 있는 공간에서 실행되는 프로세스 - 백그라운드 프로세스
보이지 않는 공간에서 실행되는 프로세스
윈도우 운영체제에서는 서비스(Service)라고 지칭한다.
프로세스 직접 확인하기
- [작업관리자-프로세스] 탭에서 확인 가능하다.
- 포그라운드 프로세스 : 사용자가 보는 앞에서 실행되는 프로세스
- 백그라운드 프로세스 : 사용자가 보지 못하는 뒤에서 실행되는 프로세스
- 데몬/서비스 : 사용자와 상호작용하지 않고 그저 묵묵히 정해진 일만 수행하는 백그라운드 프로세스
프로세스 제어 블록 (PCB : Process Control Block)
- 모든 프로세스가 CPU를 동시에 사용할 수 없기 때문에 차례대로 돌아가며 한정된 시간만큼만 CPU를 사용한다.
- 프로세스 제어 블록(PCB)
- 프로세스와 관련된 정보를 저장하는 자료 구조
- 커널 영역에 생성
- 사용 이유
- 빠르게 번갈아 수행되는 프로세스의 실행 순서를 관리
- 프로세스에 CPU를 비롯한 자원 배분
- PCB 내 정보
- 프로세스 ID(PID)
- 특정 프로세스를 식별하기 위해 부여하는 고유한 번호
- 레지스터 값
- 프로세스 상태
- CPU 스케줄링 정보
- 메모리 관리 정보
- 사용한 파일과 입출력 장치 목록
- 프로세스 ID(PID)
문맥 교환
- 문맥
- 하나의 프로세스 수행을 재개하기 위해 기억해야할 정보
- 하나의 프로세스 문맥은 해당 프로세스의 PCB에 표현
- PCB에 기록되는 정보들
- 문맥 교환
- 기존 프로세스의 문맥을 PCB에 백업하고 새로운 프로세스를 실행하기 위해 문맥을 PCB로부터 복구하여 새로운 프로세스를 실행하는 것
프로세스의 메모리 영역
- 사용자 영역 프로세스 배치
- 코드 영역(Code Segment)
- 실행할 수 있는 코드, 기계어 명령어 저장
- 데이터 영역(Data Segment)
- 프로그램이 실행되는 동안 유지할 데이터 저장
- 전역변수
- 정적할당영역
- 힙 영역(Heap Segment)
- 프로그래머가 직접 할당할 수 있는 저장 공간
- 동적 할당 영역
- 스택 영역(Stack Segment)
- 데이터를 일시적으로 저장하는 공간
- 동적 할당 영역
- 코드 영역(Code Segment)
10-2. 프로세스 상태와 계층 구조
프로세스 상태
- 프로세스 상태
- 생성상태
- 프로세스를 생성중인 상태
- 준비상태
- 당장이라도 CPU를 할당 받아 사용할 수 있지만 자신의 차례를 기다리고 있는 상태
- 실행상태
- CPU를 할당 받아 실행중인 상태
- 대기상태
- 실행도중 입출력 장치를 사용해 작업을 기다리는 상태
- 종료상태
- 프로세스가 종료된 상태
- 생성상태
프로세스 계층 구조
- 부모 프로세스 : 새 프로세스를 생성한 프로세스
- 자식 프로세스 : 부모 프로세스에 의해 생성된 프로세스
- 프로세스 계층 구조
프로세스 생성 기법
- 부모 프로세스를 통해 생성된 자식 프로세스들은 복제와 옷갈아입기를 통해 실행된
- fork : 부모 프로세스에서 복제하여 자식 프로세스 생성
- exec : 자식 프로세스는 자신의 메모리 공간을 다른 프로그램으로 교체
10-3. 스레드
프로세스와 스레드
- 단일 스레드 프로세스
- 모든 프로세스가 하나의 실행 흐름을 가지고 한번에 하나의 부분만 실행되는 프로세스
- 스레드
- 하나의 프로세스가 한번에 여러 일을 동시에 처리할 수 있음
- 프로세스를 구성하는 여러 명령어를 동시에 실행
- 프로세스를 구성하는 실행 단위
멀티프로세스와 멀티스레드
- 멀티프로세스 : 여러 프로세스를 동시에 실행하는 것
- 멀티스레드 : 여러 스레드로 프로세스를 동시에 실행하는 것
11. CPU 스케줄링
11-1. CPU 스케줄링 개요
프로세스 우선순위
- 우선순위
- 우선순위가 높은 프로세스 : 빨리 처리해야하는 프로세스
- 모든 프로세스가 CPU를 차례대로 돌아가며 사용하는 것보다 각각의 상황에 맞게 CPU를 배분하는 것이 더 효율적이다.
- 상황에 맞게 그리고 프로세스의 중요도에 맞게 프로세스가 CPU를 이용할 수 있도록 하기 위해 우선순위를 부여
스케줄링 큐
- 스케줄링 큐
- 운영체제가 매번 일일이 모든 PCB를 검사하여 먼저 자원을 이용할 프로세스를 결정하는 것은 번거롭고 오랜시간이 걸림
- 프로세스들을 줄세워 운영체제는 스케줄링 큐로 구현하고 관리함
- 준비 큐 : CPU를 이요하고 싶은 프로세스들이 서는 줄
- 대기 큐 : 입출력 장치를 이용하기 위해 대기 상태에 접어든 프로세스들이 서는 줄
선점형과 비선점형 스케줄링
- 선점형 스케줄링
- 프로세스가 CPU를 비롯한 자원을 사용하고 있더라도 운영체제가 프로세스로부터 자원을 강제로 빼앗아 다른 프로세스에 할당할 수 있는 스케줄링 방식
- 한 프로세스의 자원 독점을 막고, 프로세스들에 골고루 자원 배분 가능
- 문맥 교환 과정에서 오버헤드 발생 가능
- 비선점형 스케줄링
- 하나의 프로세스가 자원을 사용하고 있다면 그 프로세스가 종료되거나 스스로 대기 상태에 접어들기 전까진 다른 프로세스가 끼어들 수 없는 스케줄링 방식
- 오버헤드가 적음
- 프로세스가 골고루 자원을 사용할 수 없음
11-2. CPU 스케줄링 알고리즘
스케줄링 알고리즘 종류
- 선입 선처리 스케줄링(FCFS 스케줄링)
- 준비된 큐에 삽입된 순서대로 프로세스들을 처리하는 비선점형 스케줄링 방식
- 호휘효과
- 프로세스들이 실행되기 위해 기다리는 시간이 많아지는 것
- 최단 작업 우선 스케줄링(SJF 스케줄링)
- CPU사용시간이 가장 짧은 간단한 프로세스 먼저 실행하는 스케줄링 방식
- 비선점형이자 선점형
- 라운드 로빈 스케줄링
- 선입 선처리 스케줄리에 타임 슬라이스라는 개념이 더해진 스케줄링 방식
- 타임 슬라이스
- 각 프로세스가 CPU를 사용할 수 있는 정해진 시간
- 최소 잔여 시간 우선 스케줄링(SRT 스케줄링)
- 최단 작업 우선 스케줄링 알고리즘과 라운드 로빈 알고리즘을 합친 스케줄링 방식
- 우선순위 스케줄링
- 프로세스들에 우선순위를 부여하고 가장 높은 우선순위를 가진 프로세스부터 실행하는 스케줄링 방식
- 다단계 큐 스케줄링
- 우선순위 스케줄링의 발전된 형태
- 우선순위별로 준비 큐를 여러개 사용하는 스케줄링 방식
- 다단계 피드백 큐 스케줄링
- 다단계 큐 스케줄링의 발전된 형태
- 프로세스들이 큐 사이를 이동할 수 있는 다단계 큐 스케줄링
기본미션
p304. 확인문제 1번
- 생성 상태
- 준비 상태
- 실행 상태
- 종료 상태
- 대기 상태
선택 미션
준비 큐에 A,B,C,D 순으로 삽입될 때 각각의 스케줄링 기법에 따른 CPU 할당을 정리해보면,
스케줄링 기법CPU 할당
선입 선처리 | A가 모두 실행된 후 B가 실행되고, B가 모두 실행된 후 C가 실행되고, C가 모두 실행된 후 D가 실행 |
최단 작업 우선 | A, B, C, D 중 실행 시간이 짧은 것부터 작업 시간 순으로 실행 |
라운드 로빈 | A, B, C, D가 타임 슬라이스만큼의 시간동안 실행되며, 아직 실행할 게 남은 동안 이 순서로 반복 |
우선순위 | A, B, C, D의 우선순위를 판별하여 우선순위가 높은 프로세스부터 실행 |
'서평활동' 카테고리의 다른 글
혼공 컴운 - 6주차 정리 (0) | 2023.02.19 |
---|---|
혼공 컴운 - 5주차 정리 (0) | 2023.02.11 |
혼공 컴운 - 3주차 정리 (0) | 2023.01.25 |
혼공 컴운 - 2주차 정리 (0) | 2023.01.15 |
혼공 컴운 - 1주차 정리 (0) | 2023.01.08 |
댓글