Search
Duplicate

Summary

태그
1 more property

OS Summary

OS

하드웨어를 관리 – I/O 디바이스와 file에 접근, 하드웨어 접근 시 에러 탐색.
프로그램 수행 – 스케줄링, 프로그램 수행 간 에러 발생 시 에러 리포팅.
Kernel

OS의 역할

User program을 쉽게 사용할 수 있도록 해준다.
System을 편리하게 사용할 수 있도록 해준다.
하드웨어를 효율적으로 관리해준다.

DMA (Direct memory access)

I/O 디바이스가 실행될 때마다 cpu가 관여를 하면 시간적으로 비효율적. 그래서 DMA가 존재
I/O structure : I/O transaction은 Bus를 통해 수행된다
-> Bus : 주소, 데이터, 제어신호를 옮기는 선, cpu에서 다른 device에 접근할 수 있는 통로
System bus : cpu와 I/O bridge를 연결
Memory bus : I/O bridge와 Memory 연결
CPU와 I/O device는 동시에 수행이 가능
하나 이상의 cpu와 device controller는 공통된 버스를 통해 공유 메모리와 연결된다.
Device controller는 I/O operation이 끝나면 interrupt를 통해 작업종료를 알린다.
- device controller가 device operation이 끝나면 cpu에 interrupt를 보낸다.
- interrupt신호를 받은 cpu는 하던 작업을 멈추고 현재 수행중인 process를 메모리(kernel 영역) PCB영역에 정보를 저장한다.
- cpu는 kerner level로 들어가서 interrupt vector를 통해 ISR을 찾아 수행한다.
- ISR이 끝나면 기존의 process를 수행한다.
하드웨어 : interrupt(ctrl+c), 소프트웨어 : trap(system call, segmentation fault

Multiprocessor : cpu를 여러 개 둔 구조

장점 : 성능향상, 경제성(여러 cpu가 하나의 메모리 공유), 신뢰성(하나의 cpu가 고장나도 다른 cpu가 처리가능)
비대칭 멀티프로세싱 : 하나의 Master cpu와 여러 개의 Slave cpu가 존재. Master cpu는 메모리 전체에 접근이 가능하고 Slave cpu는 각자에 주어진 메모리 공간에만 접근.
대칭 멀티프로세싱 : 모든 cpu가 수평적인 구조이고 전체 메모리 영역을 공유한다.

Multiprogramming : cpu와 I/O device가 항상 일을 하도록 하는 구조

☞ CPU 스케쥴링 : cpu에게 할당해주기 위한 작업
☞ Job 스케쥴링 : 메인 메모리에 할당할 job 선택
☞ Virtual memory : 가상 메모리는 실제 메모리와 달리 디스크에 존재한다.

Dual-mode operation : User level(bit 1), Kernel level(bit 0)

☞ cpu에서 제공해주는 명령어(privileged instruction)을 User로부터 보호하기 위해 두개의 모드가 존재한다.

OS의 서비스

☞ User interface 제공, 프로그램 실행, 외부 디바이스 지원, file system관리, 프로세스들간 통신, 에러 탐색, 듀얼 모드로 보호, 잘못된 I/O의 접근 방지

System call

운영체제로부터 서비스를 받고 싶을 때 호출하는 유일한 메커니즘
라이브러리로부터 간접적으로 System call 호출(호환성과 효율성)
System call 호출과정 : System call 호출 시 라이브러리를 통해 System call number를 가지고 kernel level의 interrupt vector table에서 가지고온 number를 토대로 system call handler를 수행

IPC

Message passing : 프로세스 간 메시지를 주고받는 방식. 메시지를 주고받을 때마다 System call을 호출하여 overhead가 발생하지만 구현이 간단하다.
send와 recive 두개의 system call 사용
mailbox 방식과 직접 전송 방식이 존재
직접 전송 방식은 두개의 프로세스가 고유의 link를 가지고 그 통로를 통해 데이터 전송. 데이터에 서로의 이름을 명시한다.(파이프라인)
mailbox는 데이터 전송 시 수신자가 아닌 mailbox를 향해 전송. 메일 박스는 고유의 ID를 가지고 여러 프로세스가 사용할 수 있다.
Shared memory : 메모리의 일정 영역을 공유하는 방식. 메모리를 공유하므로 system call호출이 적지만 동기화문제를 해결해야한다.
producer-consumer problem : 생산만 하는 프로세스와 소비만 하는 프로세스
buffer가 비어있다면 consumer가 대기, buffer가 꽉 채워져있으면 producer가 대기

Multi-thread

stack 영역을 제외한 data, heap, code 영역을 공유하여 병렬적으로 작업을 수행한다.

CPU 스케쥴러

I/O bound가 CPU bound보다 우선순위가 높다.(waiting time이 적기 때문)
스케쥴러는 결정을 내리고 CPU에 할당은 Dispatcher가 해준다.
스케쥴링이 발생하는 경우 : running -> waiting, running -> terminate(Non-preemtive)
Running -> ready, wating -> ready(preemptive)

Dispatcher :

context switching, switching to user mode, context switching 종료 후

Scheduling Algorithm

FCFS : 먼저 들어온 순서대로 작업 수행 (convoy effect : 수행시간이 긴 작업우선 시 발생하는 부정적인 영향)
Short job First : 수행시간이 짧은 작업 우선. 최적의 스케쥴링 방식. 현재 남은 CPU burst time으로 우선순위 판단하는 선점형과 비선점형이 존재.
하지만 미래의 CPU burst time을 알 수 없기 때문에 Exponential Averaging 기법 사용
Priority : task에게 우선순위를 부여해 CPU burst한다.
우선순위가 낮은 task가 CPU를 할당받지 못하는 starvation현상이 발생한다.
Aging 기법을 사용해 지속적으로 수행되지 않는 task의 우선순위를 높여준다.
Round-Robin : FIFO구조로 각 task는 일정시간 CPU burst를 받고 맨 뒤로 보내진다. 할당 시간에 따라 단순 FCFS가 될수도 context switching이 너무 자주 발생할 수도 있다.

Multilevel queue

Ready queue가 분리되어 각 queue마다 다른 스케쥴링 방식을 가진다.
Task마다 들어갈 queue가 정해져있다.

Multilevel Feedback queue

프로세스들이 다양한 큐로 이동할 수 있다.
스케쥴러는 큐의 개수, 각 큐의 스케쥴링 알고리즘, 프로세스 이동, 프로세스가 서비스를 받고 싶을 때 어디 큐로 갈 것인지를 정의

Race condition

프로그램의 결과가 수행에 따라 달라질 수 있다. 선점형에서 발생가능
Critical-section영역은 Atomic해야 한다.

Deadlock Problem

Deadlock detection : 데드락 발생을 발견
Deadlock avoidance : 데드락이 발생할 것 같으면 회피하는 것
Deadlock recovery : 데드락이 발생 후 해결하는 것
Deadlock prevection : 데드락이 발생하는 원인 제거하는 것

Deadlock 발생 조건

Mutual exclusion : 하나의 자원에 여러 프로세스의 동시접근 불가
Hold and wait : 하나의 자원을 가지고 있을 때 다른 프로세스가 가진 자원을 기다림.
No preemption : 자원을 임의로 뺏을 수 없다.
Circular wait : 프로세스와 자원사이에 싸이클이 생기는 경우
4가지 모두 발생하여야 Deadlock

Deadlock prevention

데드락 발생조건 4가지중 한가지를 제거하자는 아이디어
Mutual exclusion을 제거하면 공유자원을 부정하는 것이기 때문에 불가능
Hold and wait를 제거하면 요청하는 모든 자원이 동시에 이용가능할 때만 자원을 이용가능 하기에 starvation의 위험이 있다.
Preemption이 가능하면 우선순위에 따라 필요자원을 가져오므로 해결가능
Circular wait를 제거하면 R1과 R2의 우선순위를 부여해 R1을 가진 프로세스만 R2를 가질 수 있도록 구현하여 해결가능

Deadlock avoidance

Banker`s Algorithm
- Available : Resource Type마다 k개의 instance가 사용가능하다.
- Max : Max[i,j] = k 일 때, Pi는 Rj에 대해서 최대 k개의 자원을 요청할 수 있다.
- Allocation : Allocation[i,j] = k 일 때, Pi는 현재 k개의 instance를 Rj로 부터 할당받고 있다.
- Need : Need[i,j] = k 일 때, 작업이 끝난 후 Pi는 k개 이상의 instance를 필요로 한다.
- Need[i,j] = Max[i,j] - Allocation[i,j]
- 은행원은 최소 하나의 고객이 돈을 갚을 수 있는 여유 돈을 남겨두어야한다. 그래야 돌려받고 다른 고객에게 빌려줄 수 있다.

Memory Management Strategies

Virtual address를 Physical address로 변환하는 Address Translation이 핵심
메인 메모리를 디스크의 캐쉬로 사용.
Address Translation은 매우 빠르게 이루어져야 하므로 MMU의 도움을 받는다.
MMU는 TLB(VA를 가지고 Entry 확인 후 hit면 바로 메모리 접근)와 Register(page table존재)로 구성
base 레지스터는 프로세스의 시작 주소를 담고 limit 레지스터는 프로세스의 크기를 담고 있다. Base, limit 레지스터는 MMU의 도움으로 메모리 접근 없이 메모리 주소에 대해 파악할 수 있다.

Fragmentation

External Fragmentation : 새로운 프로세스가 할당될 때 여유 공간은 충분하지만 연속적이지 않아 적재를 못하는 현상.
Internal Fragmentation : page와 같은 최소 단위의 공간을 전부 채우지 못하는 현상.

Paging

n개의 page를 메인 메모리에 올리려면 n개의 frame만큼 공간이 있어야 한다.
메모리에 Page table을 두어 VA를 PA로 변환한다.
VA를 page 사이즈로 나누어 page number를 구하고 PCB내부의 page table을 토대로 frame number를 구한다. 이 frame number에 frame number 사이즈를 곱하면 실제 메모리의 시작주소가 나온다. 그리고 VA를 page 사이즈로 나눈 나머지가 offset이다.
page table의 valid bit가 0인(메모리에 존재하지 않는)페이지에 접근 시 trap이 발생하여 OS가 디스크에 pager를 요청한다. 해당 page는 메모리에 적재되고 이는 page table에 올라가 valid bit를 1로 설정하고 cpu에 할당된다. #참조의 지역성
page replacement : 메모리가 꽉 찬 경우 victim frame을 선택하여 디스크에서 필요한 page와 swap한다.
victim frame 결정 알고리즘
FIFO(먼저 들어온 frame 보냄), optimal(가장 오래 cpu 할당을 받지 못한 frame 보냄), LRU(page가 참조될 때 시간기록, 혹은 stack 구조의 가장 위에 위치)
second chance algorithm : FIFO기반이지만 Reference bit가 1이면 0으로 바꾸고 다음 frame 조사

Segmentation

프로그램을 세그멘트 단위로 분할. 페이지나 프레임과 달리 고정 사이즈가 아닌 논리적 분할 사이즈.

Demand Paging

실행중인 프로세스가 필요한 페이지만 올리는 것.
Lazy Swapper = pager, Swapper는 프로세스를 적재하고 page는 페이지를 적재