[혼공학습단 12기]혼자 공부하는 컴퓨터구조+운영체제 (4주차)

JAEHYEOK PARK·2024년 7월 28일
0

혼공학습단

목록 보기
4/7

운영체제란?

실행할 프로그램에 필요한 자원을 할당하고 프로그램이 올바르게 실행되도록 돕는 프로그램이다.
//자원이란 CPU, 메모리, 보조기억장치, IO device같은 프로그램 실행에 마땅히 필요한 요소들을 말한다.

운영체제가 제공하는 서비스

Kernel(커널)
자원에 접근 조작, 프로그램 안전하게 실행하는 기능을 담당하는 부분을 말한다.
자원에 접근조작: 응용 프로그램이 컴퓨터 자원을 마음대로 접근 조작할 수 있다면 프로그램 오류에 컴퓨터 전체가 큰 영향을 받을 수 있게된다.

-> 운영체제는 dual mode(이중 모드)를 통해 CPU가 명령어를 실행하는 모드를 사용자 모드, 커널 모드로 구분하여 관리한다.

커널 모드만이 운영체제 서비스를 제공받을 수 있다.(자원접근 가능)
사용자 모드가 운영체제 서비스를 제공받기 위해서는 운영체제에 system call을 보내면(일종의 interrupt) 커널 모드로 전환할 수 있다.(fork(), open() 등...)
또한 CPU의 프로세스 관리 스케줄링, 프로세스 메모리 할당, interrupt service routine 등

UI는 커널이 제공하는 기능에는 포함되지 않는다.(GUI,CLI)


이 글을 작성한 컴퓨터의 프로세스 목록이다.

용어정리

프로세스: 실행 중인 프로그램
foreground process: 사용자가 보는 앞에서 실행되는 프로세스
background process: 사용자가 보지 못하는 뒷편에서 실행되는 프로세스

-> 백그라운드 프로세스 중 사용자와 상호작용x 할일 하는 프로세스
유닉스에선 daemon, 윈도우는 service라고 부른다.

PCB

프로세스 제어 블록, 프로세스와 관련된 정보를 저장하는 자료구조

프로세스마다 상품 태그처럼 달려있다.(커널이 자원배분할때 이용)
PCB는 커널 영역에 생성된다.(커널이 이용하기 때문이다.)
PCB는 프로세스 생성 시 만들어지고 실행이 끝나면 폐기된다.

PCB에 담긴 정보들

PID: Process Id 프로세스 식별 위해 부여하는 고유한 번호이다.
같은 프로그램도 두 번 실행하면 PID가 다른 두개의 프로세스가 생성된다.
레지스터 값: 자신의 실행차례가 돌아오면 프로그램 카운터 등 레지스터 값 복원
프로세스 상태: 현재 IO 장치 대기중 등 현재 정보가 PCB에 저장됨
CPU 스케줄링 정보: 해당 프로세스가 언제 어떤 순서로 CPU할당받을지도 저장됨
메모리 관리 정보: 프로세스마다 메모리 저장 위치가 다르므로
해당 프로세스 메모리 저장 정보(페이지 테이블 정보), 베이스 레지스터, 한계 레지스터 등 정보가 담김

사용한 파일, IO장치 목록: IO장치 프로세스 할당정보, 파일 열람정보

이 모든 값이 PCB(커널 영역)에 담겨있다.
Context: 하나의 프로세스 수행을 재개하기 위해 기억해야 할 정보를 말한다.
context 또한 해당 프로세스 PCB에 표현되어 있다.(앖선 레지스터 값 등등)

Context Switching: 기존 프로세스 context PCB에 백업하고 새로운 프로세스 실행하기 위한 context PCB로부터 복구하여 새로운 프로세스를 실행하는 것.

프로세스와 user space

코드 영역(code segment, text segment): 실행할 수 있는 코드(기계어로 저장된 CPU명령어가 저장됨-read only)
데이터 영역(data segment): 전역변수 등 잠깐 쓰는 데이터가 아닌 프로그램이 실행되는 동안 유지할 데이터가 저장된다.
-> 코드 영역과 데이터 영역은 크기가 변하지 않아 정적 할당 영역이라고 부른다.

힙 영역(heap segment): 프로그램 만드는 사용자가 직접 할당하는 저장 공간 -> 사용 후 할당됐던 공간 반환 안하면 memory leak 발생
스택 영역(stack segment): 데이터를 일시적 저장하는 공간(매개변수, 지역변수 등)
-> 힙 영역과 스택 영역은 동적 할당 영역이다.

프로세스의 상태

new -> 프로세스 생성 중(PCB 할당받음)
ready -> CPU 할당받아 실행 가능한 상태(dispatch가 준비->실행 전환 말한다.),프로세스 할당 시간 다쓰면 running -> ready
running -> CPU 할당 받아 실행 중
blocked -> IO작업 기다리는 상태 -> ready
terminated -> 프로세스 종료

parent process: 새로운 프로세스 생성할 시 호출한 프로세스
child process: parent process에 의해 생성된 프로세스
PPID: child process의 PCB에 기록된 parent process의 PID
fork: parent process가 system call을 통해 자신의 복사본 child process로 생성함
exec: 자신의 메모리 공간을 다른 프로그램으로 교체(부모 프로세스가 fork후 exec호출하지 않는것은 둘이 같은 코드를 병행하여 실행하는 프로세스이다.)

Thread: 프로세스를 구성하는 실행 단위를 말한다. -> 운영체제에서는 앞선 컴퓨터구조에서 정리했던 SW적인 thread의 정의를 따르는 듯 하다.

스레드 간 공유하는 것
코드, 데이터, 힙 영역
스레드 간 공유하지 않는 것
Thread ID
Program counter, Register value
Stack(매개변수 등)

CPU 스케줄링

프로세스들에게 공정하고 합리적으로 CPU자원을 배분하는 것

프로세스는
I/O bound process(io작업 위주 I/O burst 많음)
CPU bound process(cpu작업 위주 CPU burst 많음)로 나뉜다.
각 프로세스마다 CPU 점유 시간 등이 천차만별이므로
효율적인 분배를 위한 순서를 정하기 위해
Scheduling queue를 구현하여 프로세스를 줄지어 관리한다.
이 때 대표적으로
ready queue: CPU이용 준비 프로세스
waiting queue: I/O 이용 위해 대기 상태 프로세스

preemtive scheduling: 선점형 스케줄링이라고 함.
프로세스가 cpu를 비롯한 자원 사용하고 있어도 운영체제가 자원을 강제로 빼앗아 다른 프로세스에 할당하는 방식

//context switching overhead 조심해야 함

non-preemtive scheduling: 비선점 스케줄링이라고 함.
하나의 프로세스 종료되거나 대기 상태에 접어들기 전까진 다른 프로세스가 끼어들 수 없는 스케줄링 방식

CPU scheduling algorithm

FCFS스케줄링: non-preemptive scheduling way - 준비 큐에 삽입된 순서대로 프로세스 처리하는 비선점형 스케줄링 방식
//convoy effect(호위 효과) - cpu burst time짧은 작업도 순위가 밀리면 오래 기다려야 할 때
SJF스케줄링: preemptive/non-preemptive scheduling way - 비선점 알고리즘, 선점형 알고리즘이 모두 가능하다.
RR스케줄링(round-robin): 타임 슬라이스를 통해 정해진 시간마다 프로세스를 교대해 주는 preemptive scheduling 방식이다.
이 프로세스 교대 주기인 time slice를 정하는 것이 굉장히 중요하다
SRT스케줄링(shortest remaining time): 정해진 타임 슬라이스만큼 cpu를 사용하되, cpu를 사용할 다음 프로세스는 남아있는 작업 시간이 가장 적은 프로세스가 선택된다.
Priority스케줄링: 프로세스들에 우선순위를 부여하고, 가장 높은 우선순위를 가진 프로세스부터 실행한다.

-> 스케줄링에 있어서 starvation 현상을 조심해야 함.(한 프로세스가 우선순위가 높은 프로세스들에 의해 실행이 계속 연기되는 현상)
->aging을 통해 우선순위를 높여주는 방식이 있다.

다단계 피드백 큐 스케줄링(multilevel feedback queue scheduling): 큐를 여러개 두어 스케줄링하는 다단계 스케줄링의 발전된 형태이다.
프로세스들이 큐 사이를 이동하여 프로세스가 해당 큐에서 실행이 끝나지 않는다음 다음 우선순위 큐에 삽입되어 실행한다.
이 때 낮은 우선순위 큐에서 너무 오래 기다리고 있는 프로세스가 있다면 점차 우선순위가 높은 큐로 이동시키는 aging기법을 적용할 수 있다.

숙제

1. p. 304의 확인 문제 1번 풀고 인증하기

답:
1. 생성 상태(new)
2. 준비 상태(ready)
3. 실행 상태(running)
4. 종료 상태(terminated)
5. 대기 상태(blocked)

2. Ch.11(11-2) 준비 큐에 A,B,C,D 순으로 삽입되었다고 가정했을 때,
선입 선처리 스케줄링 알고리즘을
적용하면 어떤 프로세스 순서대로 CPU를 할당받는지 풀어보기

답: 선입 선처리 스케줄링(FCFS스케줄링)기법을 사용할 경우
먼저 큐에 들어온 프로세스가 먼저 실행되기 때문에
삽입된 순서인 ABCD순으로 CPU를 할당받게 된다.

이번 주차 간 공부하면서 궁금했던 점들 Q&A

Q1. 한 프로세스에서 스레드 간 공유하는 부분과 공유하지 않는 부분을 정확히 정리해보면?

A: 스레드 간 공유하는 부분
코드 섹션(Code Section): 동일한 프로그램 코드
데이터 섹션(Data Section): 전역 변수와 정적 변수를 포함한 데이터 영역
힙(Heap): 동적으로 할당된 메모리 영역인 힙
파일 디스크립터(File Descriptors): 파일을 열 때 생성되는 파일 디스크립터
공유 메모리(Semaphore, Mutex 등): 동기화 기법에 사용되는 semaphore, Mutex 같은 동기화 객체

스레드 간 공유하지 않는 부분
스택(Stack): 로컬 변수 등
레지스터(Registers): CPU 레지스터는 각 스레드가 독립적으로 사용Context Switching시, 스레드마다 레지스터 값이 저장되고 복원
Thread Local Storage(TLS): 스레드가 자신의 용도로 사용하는 지역 데이터를 저장하는 영역

Q2. cpu 스케줄링 방식 중 RR방식(round-robin scheduling)에서 timeslice의 보편적인 선정 기준은?

A: 시스템 오버헤드(Overhead) - 너무 짧으면 overhead 유발,
프로세스 특성(Process Characteristics) - cpu bound process인지 등등,
시스템 부하(System Load) - 시스템 현재 부하에 따라 조정(부하가 높으면 timeslice를 짧게 적용하여 프로세스 분배),
실험 및 튜닝(Experimentation and Tuning) - 모니터링을 통해 조정
위와같은 다양한 정보를 고려하여 선정하게 된다.
일반적으로 10ms에서 100ms 사이의 값이 사용된다.

느낀 점 및 차주 목표
혼공학습단 12기 활동도 벌써 반환점에 도달했다. 1주차에 velog 작성법도 잘 몰라서 덤벙대던게 어제같은데 벌써 4주가 지났다니 새삼 놀랍다
생각해보면 최근 덥다는 핑계로 평소보다 살짝 느슨해진 감이 없지 않았는데
이번 혼공학습단 활동을 하면서 긴장감을 유지할 수 있었던 것 같아 지나고 보니 정말 신청하길 잘했다는 생각이 든다
다음 주차는 숙제가 없는 것으로 알고 있지만 마냥 놀지 않고 4주차까지의 활동 점검과 복습도 한번 해줘야겠다. 완주까지 파이팅!!

0개의 댓글