OS 전반적인 지식

OkGyoung·2023년 6월 20일
0

2023.11 이전 자료

목록 보기
26/30

프로세스와 스레드의 차이

프로세스 : 실행중인 프로그램

디스크 -> 메모리 -> CPU할당가능한 프로그램 + 동적할당 메모리 힙

PCB : 프로세스의 중요 정보를 가짐 프로세스 생성 시 같이 생김

PCB 저장정보 :
1. PID
2. 프로세스 상태 (new, ready, running, waiting, terminated)
3. 프로그램 카운터 (프로세스가 다음에 실행할 명령어 주소)
4. CPU 레지스터
5. CPU 스케줄링 정보
6. 메모리 관리 정보
7. 입출력 상태 정보
8. 어카운팅 정보 (사용된 CPU 시간, 시간제한, 계정번호 등)

스레드 : 프로세스의 실행단위

스레드 구성요소 :
1. 스레드 ID
2. 프로그램 카운터 (각 스레드가 명령어를 어디까지 실행했는지 기억해야함)
3. 레지스터 집합
4. 스택 (각 스레드에 정보를 저장해야함)


하나의 프로세스를 여러 스레드로 동시에 사용? 멀티스레딩

장점 : 동시에 작업해서 같은 메모리 영역을 사용해 공간절약 Heap영역에서 통신으로 간단해진 통신 방법, 캐시메모리를 비우지 않아서 빠른 응답

문제점 : 동시에 같은 메모리영역을 사용해 원하지 않는 정보가 올 수 있다. -> 동기화로 해결가능 -> 하지만 동기화를 사용하면 특정 작업에 물려 병목현상이 생길 수 있다.

멀티스레드 멀티 프로세스 뭘 이용해야하냐! 그때 그때 다르다.


스케줄러

스켈줄링용 Queue 3개 Job Queue, Ready Queue, Device Queue

Job Queue : 현재시스템내 모든 프로세스 집합
Ready Queue : 메모리에서 대기하면서 CPU할당을 기다리는 집합
Device Queue : I/O 입출력 대기

장기스케줄러? 많은 프로세스가 기다리면 대용량 메모리에서 기다리면서 CPU할당을 기다림
즉 메모리와 디스크사이에서 스케줄링 담당, 프로세스의 메모리 할당, 실행중인 프로세스 수 제어,
프로세스의 상태를 new -> ready 전환

단기스케줄러? CPU<->메모리 즉 메모리와 CPU사이에서 무얼 실행할지 정한다. 상태 ready -> running -> waiting -> ready 전환

중기스케줄러? 여유공간을 위해 메모리를 전부 디스크로 넘겨버림(swapping) 실행중인 프로세스 수를 제어한다. 상태 ready -> suspended(외부적 이유로 정지된 프로세스) 전환


CPU 스케줄러

FCFS(First Come First Served) : 먼저 온 순서대로

특징
1. 비 선점형 스케줄링
2. CPU잡으면 burst까지 CPU반환X
3. 2로 인해 긴시간 프로세스 진입 시 효율성 떨어짐(convoy effect)


SJF(Shortest - Job - First) : 짧은거 부터 하자

특징
1. 비 선점형 스케줄링
2. CPUburst타임이 작은 것이 먼저 할당(기존 작업 밀어냄)
3. 긴 CPUburst는 영영 작업을 못할 수 있다.(starvation)


SRTF(Shortest Remaining Time First) : 남은 burst time VS 새로운 burst time

특징
1. 선점형 스케줄링
2. 새로운 프로세스 도달마다 새로이 스케줄링 CPUburst타임 측정 불가

Priority Scheduling : 우선순위를 만들어 붙이자

특징
1. 선점형 비선점형 둘다 가능 높은 우선순위를 멈추고 넣느냐, ReadyQueue에 앞에 넣느냐
2. 무기한 기다릴 수 있다. 하지만 오래기다린 프로세스 우선순위를 높혀주면된다.

Round Robin : 각프로세스에 동일한 할당크기를 주고 계속 바꿔준다.

특징
1. 할당시간 끝 -> ready queue 의 제일 뒤에 가서 다시 줄
2. 공정한 스케줄링
3. 응답이 빠르다.


동기와 비동기

메소드를 실행시킴과 동시에 반환 값이 기대되는 경우를 동기 라고 표현하고 그렇지 않은 경우에 대해서 비동기

쉬게 말하면 메소드 실행 -> 대기 -> 반환 값 이면 동기, 메소드 실행 -> 작업에 넣어놓음 -> 다음 코드 실행 비동기


임계영역

멀티스레딩에서 동일영역에 접근하면 문제가 생길 수 있다!

멀티스레딩에서 동일영역에 접근하는 코드영역을 임계영역이라한다.

해결 조건
1. Mutual Exclusion 하나가 접근중이면 다른 하나는 대기
2. 임계영역에서 실행중인 코드가 없고, 별도의 동작이 없는 프로세스만 진입후보
3. 진입을 대기하는 동안 다른 프로세스들이 임계영역에 진입하는 횟수는 제한해야함

해결법
1. Mutex Lock 진입시는 Lock를 얻고 나가면 반환
2. 세마포(동기화 도구)를 이용
3. 모니터


메모리 관리 전략

Swapping : 메모리의 관리를 위해 사용되는 기법.

단편화 (Fragmentation) : 프로세스들이 메모리에 적재되고 제거되는 일이 반복되다보면, 프로세스들이 차지하는 메모리 틈 사이에 사용 하지 못할 만큼의 작은 자유공간들이 늘어나는 현상

외부단편화 : 메모리 공간 사이사이 충분한 공간존재하지만 사용불가
내부단편화 : 프로세스가 차지한 메모리공간에서 남는 공간

해결법
1. 페이징 : 물리메모리공간(Frame) 논리메모리공간(페이지)로 나눔 -> 내부단편화는 가능성
2. 세그멘테이션 : 물리, 논리 모드 세그먼트단위로 분할 -> 외부단편화 가능성


가상 메모리

프로세스 전체가 메모리 내에 올라오지 않더라도 실행이 가능하도록 하는 기법

가상주소공간(메모리에 저장되는 그대로 가상메모리에 구현한 공간)

요구페이징 : 전체를 디스크에서 물리 메모리에 적재하는 대신, 초기에 필요한 것들만 적재하는 전략

profile
이유를 생각하는 개발자

0개의 댓글