집 짓는 개발블로그
[CS] 운영체제론 정리(1/2) 본문
본 글은 <2024 박미진 컴퓨터일반> 책을 읽고 정리한 내용입니다
+) 컴퓨터 시스템 구성요소 4: HW, OS, 응용프로그램, 사용자
+) 커널(kernel) : OS의 핵심, 메모리에 상주하면서 OS의 다른 부분 또는 응용프로그램 수행에 필요한 환경 설정하는 소프트웨어. 응용 프로그램 실행에 필요한 다양한 서비스를 제공하고 + 실행되는 프로세스를 스케줄링
Ch1. 운영체제 개요
01. 운영체제 개요
1. 운영체제의 정의
1) 사람을 대신해 컴퓨터 시스템의 각종 자원을 보다 효율적으로 관리하고 운영하는 시스템 소프트웨어
2) 사용자에게 최대의 편리성을 제공하도록 하기 위한 컴퓨터 하드웨어 - 사용자 간의 매개체 역할을 하는 시스템 프로그램
2. 운영체제의 목적 3
(1) 편리성 : 사용자에게 편리한 환경 제공
- OS는 사용자가 프로그램을 효율적으로 실행할 수 있는 환경 제공해야 함
- 사용자와 커퓨터 시스템이 정보 및 명령을 상호 교환할 수 있는 인터페이스 제공해야 함
(2) 효율성 4: 시스템 성능 향상 지원
- 처리량 : 시스템의 생산성 나타내는 것, 단위시간당 처리하는 작업량
- 응답시간 : from 사용자가 시스템에 작업 의뢰한 후 ~ to 반응 얻을 때까지 걸리는 시간
- 시분할 시스템 & 온라인 시스템에서는 '응답시간(response time)' 이라 함
- 일괄처리 시스템에서는 '반환시간(turn around time)' 이라 함
- 신뢰도 : HW, SW가 실패 없이 주어진 기능을 수행할 수 있는 능력
- 사용 가능도 : 사용자가 일정기간 동안 컴퓨터를 실제로 사용한 시간 비율. 고장/오류가 발생해도 그 영향을 최소화하여 시스템 전체를 중단하지 않고 운영 가능해야 함
(3) 제어 서비스 향상
- OS는 시스템을 확장하고 효율적으로 운영할 수 있도록 새로운 기능의 효과적인 개발 허용해야 함
- I/O 장치의 동작을 관리&제어하거나 / 시스템 오류예방 등으로 -> 컴퓨터 자원을 여러 사용자에게 효율적으로 할당하고 관리할 수 있도록 제어 서비스를 발전해나가야 함
3. 운영체제의 기능 2
(1) 자원 관리 5
- 주기억장치 관리
- 주기억장치의 어느 부분을 사용하고? 누가 사용하는지? 를 점검
- 주기억장치에 저장할 프로세스 결정
- 주기억장치 할당&회수하는 방법 결정
- 보조기억장치 관리
- 빈 여유공간 관리
- 새로운 파일 작성 시 저장장소 할당
- 파일 생성&삭제
- 프로세스 관리
- 프로세스&스레드 스케줄링
- 사용자 프로세스&시스템 프로세스 생성/제거
- 프로세스 중지/재수행
- 프로세스 동기화 방법 제공
- 프로세스 통신방법 제공
- 교착상태 방지 방법 제공
- 주변장치(입출력장치) 관리
- 임시저장시스템 기능 제공
- 일반 장치용 드라이버 인터페이스 제공
- 특정 장치 드라이버 제공
- 파일(데이터) 관리
- 파일 생성/삭제
- 디렉터리 생성/삭제
- 보조기억장치에 있는 파일 맵핑
- 안전한(비휘발성) 저장장치에 파일 저장
(2) 시스템 관리 3
- 시스템 보호(사용자 권한 부여)
- 컴퓨터 자원에서 프로그램, 프로세스, 사용자의 접근 제어하는 방법
- OS는 파일 사용권한 부여, 데이터 암호화 등 서비스 제공 -> 데이터와 시스템 보호
- 네트워킹(통신)
- 연결된 프로세스가 통신할 때 경로설정, 접속정책, 충돌, 보안 등의 문제 고려
- 명령 해석기
- 사용자나 프로그램에서 대화형으로 입력한 명령어를 이해하고 실행하는 사용자 - OS의 인터페이스
+) 운영체제 서비스
1) 부팅 서비스
- OS를 메인 메로리에 적재하는 과정이 부팅(booting)
- '부트 로더'는 부트스트랩 로더(bootstrap loader)의 줄임말, HDD와 같은 보조기억장치에 저장된 OS를 메인 메모리에 적재하는 ROM에 고정시킨 소규모 프로그램
2) 시스템 호출(system call)
- 실행 중인 프로그램 - OS 간의 인터페이스, API(Application Programming Interface)라고도 함
- 사용자 프로그램이 시스템 호출을 통해 OS 기능을 제공받는 것
- 시스템 호출 : 핵심커널서비스와 통신 / 새로운 프로세스의 생성&실행 / HW 관련 서비스 등이 있음
- 시스템과 상호작용하는 동작은 대개 사용자 수준 프로세서에서는 사용 불가능하나, 시스템호출을 해서 OS에 서비스 요청 가능
02. 운영체제의 유형별 특징
1. 다중프로그래밍 시스템(Multi-Programming System)
- 하나의 CPU로 여러 개의 사용자 프로그램이 '마치 동시에 실행되는 것처럼 처리하는 방식'으로, 한 사용자 프로그램이 입출력장치 등 CPU를 필요로 하지 않는 동안 / 다른 사용자 프로그램이 그 시간에 CPU 사용 ➙ 효율 극대화
- 여러 작업을 준비상태로 두기 위해 메모리에 보관해야 하고 + 메모리 관리 필요 + 준비 상태의 여러 작업 中 하나를 선택하기 위한 결정방법(스케줄링) 필요함
2. 시분할 시스템(Time Sharing System)
- 프로세스 스케줄링과 다중 프로그래밍 사용하여 각 사용자에게 컴퓨터를 '시간적으로 분할하여 사용'할 수 있도록 함
- 여러 작업이 메모리에 저장되어 있는 경우, 한 작업이 다른 작업의 데이터를 변경하는 것에 대한 제어 필요
3. 다중 처리 시스템(Multi-Processing System)
- 마이크로프로세서 여러 개를 연결해 다중 프로세서를 만들 수 있음. (초고속 프로세스 사용 않고도 대형 컴퓨터의 능력 얻을 수 있음)
- 주/종 다중 처리 시스템(Master-Slave) // 대칭적 구성 다중 처리 시스템으로 구분됨
+) 운영체제 구조 2
1) 단일구조(monolithic) OS : 초기에 생겨남, 가장 보편적, OS의 모든 기능을 커널과 동일한 메모리 공간에 적재한 후 시스템 호출만으로 사용 가능, 작고 간단+시스템 기능 제한된 구조. ex) 도스와 초기 유닉스
2) 마이크로 커널 구조 OS : 커널에는 최소 기능만 포함 -> 크기 대폭 축소, 기타 기능은 사용자 공간으로 옮겨 사용자 영역에서 수행하는 서버 구현 방법
4. 분산처리 시스템(Distributed Processing System)
- 시스템마다 OS+메모리를 가지고 독립적으로 운영, 필요할 때 통신
- 자원 공유, 연산속도 향상, 신뢰성과 통신 등이 목적으로, 여러 개의 물리적 프로세서에 연산 분산 가능
Ch2. 프로세스와 스레드
01. 프로세스
1. 프로세스의 정의
- 실행 중인 프로그램
- 디스크에 저장되어 있던 실행 가능한 프로그램이 메모리에 적재되어 OS의 제어를 받는 상태, 해당 프로세스가 사용하고 있는 메모리 영역이 존재함
- 프로세스는 !반드시! 한 개의 PCB(Process Control Block: 프로세스 제어 블록)과 연결됨!
2. 프로세스의 일반적인 메모리 구조
- 프로그램 = 컴파일한 코드 + 초기화 전역변수 + 문자열&문자열 상수 etc.. 정적 데이터를 포함하는 '정적 개체'임
- 프로세스 = 프로그램 카운터, 레지스터처럼 '현재 어떤 자원을 사용하는지' 관련 정보가 들어있는 '동적 개체' 임
2024.06.23 - [알고리즘] - (Python) 재귀함수 return에 대한 의문 풀이하기
▲ 메모리 구조 참고
(1) 스택(stack)
- 데이터를 일시적으로 저장하는 영역
- 지역변수, 호출한 함수의 반환주소, 반환값, 매개변수 etc..에 이용
- 함수를 호출할수록 커지고 大 반환하면 줄어들음 小
(2) 힙(heap)
- 코드 영역과는 별도로 유지되는 자유영역
- 동적으로 메모리를 할당하려고 프로그램 실행 중 시스템 호출을 사용했다가 해제하는 방법으로 활용됨
- 주소값이 커지는 방향으로 증가 ⬆️
(3) 데이터(data)
- 프로그램의 가상주소 공간
- 전역변수/정적변수를 저장하거나 할당하고 실행하기 전에 초기화됨
(4) 코드(code)
- 실행 명령을 포함하는 메모리거나, 목적 파일에 있는 프로그램 영역
- 프로그램 시작시 프로세서가 디스크에서 읽어 실행하는 컴파일한 프로그램을 저장함
02. 프로세스 종류
1. 역할에 따른 분류
(1) 시스템(커널) 프로세스
- 모든 시스템 메모리와 프로세서의 명령에 액세스 가능한 프로세스
- 프로세스 실행 순서 제어, 다른 사용자 및 커널(OS) 영역을 침범하지 못하게 감시, 사용자 프로세스 생성
(2) 사용자 프로세스
- 사용자 코드를 수행하는 프로세스
2. 병행 수행 방법에 따른 분류
(1) 독립 프로세스
- 다른 프로세스에 영향 주지 않거나/영향 받지 않으면서 수행하는 병행 프로세스
(2) 협력 프로세스
- 다른 프로세스에 영향 주거나/영향 받는 병행 프로세스
+) 부모/자식/고아/좀비
1) 부모 프로세스 : 다른 프로세스 만듦
2) 자식 프로세스 : 부모 프로세스에 의해 만들어지는 프로세스, 할일이 끝나면 부모프로세스에게 결과 돌려주고 종료됨
3) 고아 프로세스 : 자식프로세스가 아직 실행중인데, 부모프로세스가 먼저 종료된 경우
4) 좀비 프로세스 : 자식프로세스가 실행을 종료했는데, 프로세스 목록에 남아있는 경우
03. 프로세스 상태
1. 프로세스 상태(Process Status)
(1) 생성(New) : 프로세스의 작업 공간이 메인 메모리에 생성되고 + 운영체제 내부에 프로세스의 실행정보 관리하기 위한 프로세스제어블록(PCB)이 만들어지는 상태
(2) 준비(Ready) : 프로세서에게 할당되기를 기다리는 상태
(3) 실행(Running) : 프로세서를 점유하여 명령어들이 실행되는 상태
(4) 대기(Blocked) : 프로세서가 어떤 이벤트(입출력 종료와 같은 외부신호) 가 일어나기를 기다리는 상태
(5) 완료(Terminated) : 프로세스의 수행이 끝난 상태
2. 프로세스 상태 변환(전이) (Process status transition)
(1) 준비 → 실행(디스패칭 dispatching) : 준비 상태의 프로세스는 디스패처(Dispatcher)에 의해 프로세서가 부여되면 → 실행상태가 됨
(2) 실행 → 준비(time run out) : 어떤 프로세스가 프로세서를 계속 독점하는 것을 방지하기 위해, OS는 인터럽트 클록을 둬 지정된 시간 동안만! 프로세스가 프로세서 점유 가능하게 함
(3) 실행 -> 대기(block) : 실행상태의 프로세스가 지정된 시간 이전에 입출력연산 등을 필요로 할 경우, 그 프로세스는 스스로 프로세서를 양도하게 됨
(4) 대기 -> 준비(wake up) : 입출력작업 끝났을 때, 대기 상태의 프로세스는 to 준비상태로 변환 Δ
04. 프로세스 제어 블럭(PCB : Process Control Block)
- PCB란? OS에 특정 프로세스에 대한 중요한 정보를 제공해주는 데이터 블록
- when: 프로세스를 생성할 때 만들어짐, where: 주기억장치에 저장됨, what: OS내에서 한 프로세스의 존재를 정의, 프로세 실행 종료되면 같이 삭제됨~
- 인터럽트 처리, 자원할당, 스케줄링 등을 수행하는 OS의 모든 모듈에 의해 판독되고 수정 가능
- 구조
프로세스 식별자(Process ID) | 각 프로세스 고유 식별자 |
프로세스 상태(Process status) | 생성/준비/실행/대기/중단 등 상태 표시 |
프로그램 카운터(Program counter) | 프로세스를 실행하는 다음 명령의 주소 표시 |
레지스터 저장 영역(Registers) | 누산기, 인덱스 레지스터, 스택 포인터, 범용 레지스터, 조건 코드 등의 정보. 컴퓨터 구조에 따라 수나 형태가 다름 인터럽트 발생함녀 프로그램 카운터와 함께 저장 |
프로세서 스케줄링 정보 | 프로세스의 우선순위, 스케줄링 큐의 포인터, 기타 스케줄 매개변수 |
계정 정보(Accounting) | 프로세서 사용시간, 실제 사용시간, 사용 상한시간, 계정번호, 작업/프로세스 번호 등 |
입출력 상태 정보 | 특별한 입출력 요구 프로세스에 할당된 입출력장치, 열린 파일 리스트 등 |
메모리 관리 정보 | OS가 사용하는 메모리 시스템에 따른 상한, 하한 레지스터(경계 레지스터), 페이지 테이블이나 세그먼트 테이블 값 |
+) 프로세스 생성 시 필요한 세부 작업
1. 새로운 프로세스에 '프로세스 식별자' 할당
2. 프로세스의 모든 구성요소를 포함할 수 있는 주소공간 + PCB 공간 할당
3. PCB 초기화(프로세스 상태, 프로그램 카운터 초기화, 자원 요청, 프로세스 제어정보(우선순위) 등 포함)
4. 해당 준비큐에 삽입
05. 문맥교환(Context Switching)
- 프로세서를 다른 프로세스로 전환하려면? 이전의 프로세스 상태 레지스터 내용을 보관하고 + 다른 프로세스의 레지스터들을 적재해야 함 → 이 과정이 <문맥교환(Context Switching)>
- 프로세스가 '준비 -> 실행', '실행 -> 준비', '실행 -> 대기' 상태로 변환할 때 발생
- 문맥교환은 모두 과부하(overhead)가 발생
- OS에서 문맥교환은 자주 발생하므로 효율적으로 구현 필요 → 이를 위해 스레드(Thread) 사용
06. 스레드(Thread)
1. 스레드의 개념
(1) 프로세스는 자원 / 제어로 특성 구분 가능한데, 이 중 제어만 분리한 실행단위를 스레드(Thread) 라 함
(2) 프로세스 하나는 스레드 하나 이상으로 나눌 수 있음
(3) 스레드들은 프로세스의 직접 실행 정보를 제외한! 나머지 프로세스 관리 정보 공유
- 프로그램 카운터(PC)와 스택 포인터(SP) 등.. + 스레드 실행 환경 정보(문맥 정보), 지역 데이터, 스택 < 을 독립적으로 가짐
- 코드, 전역 데이터, 힙 < 을 다른 스레드와 공유함
(4) 응용 프로그램에는 최소 1개 이상의 프로세스 있고 > 프로세스에는 최소 1개 이상의 스레드가 있음
(5) 같은 프로세스의 스레드들은 동일한 주소공간 공유
2. 스레드의 이점
(1) 프로세스의 자원과 메모리 공유 가능
- why : 스레드들이 프로세스 자원 하나와 메모리를 공유하므로 → 응용프로그램 하나가 동일한 주소공간에서 스레드를 여러 개 실행하여 시스템 성능 향상 가능
(2) 경제성 ↑
- 프로세스를 생성하는 것보다 << 스레드를 생성하여 문맥교환 수행하는 게 overhead 더 작음 ↓
(3) 다중처리(멀티 프로세싱)로 성능 ↑ 효율 ↑
- 각 스레드를 여러 프로세스에서 병렬로 실행하여 성능&효율성 향상 가능
+) 다중스레드의 장점 정리(+)
1) 동일프로세스의 스레드는 자원공유하므로 - 자원생성/관리 중복성 최소화 -> 실행능력 올라감
2) 각 스레드는 kernel개입 없이도 독립적 실행 가능 -> 서버에서 많은 요청을 효과적으로 처리
3) 프로세스보다 스레드 생성이 더 빠름 + 동일한 프로세스에 있는 스레드 간의 교환&종료도 더 빠름
4) 프로그램 변경하지 않고 스레드 병렬로 처리해 효율 극대화 ↑ 가능
5) 스레드별로 실행환경정보 따로 있지만 but.. 서로 많이 공유하므로? 프로세스보다 << 동일한 프로세스의 스레드에다가 프로세서 할당하거나 or 스레드간의 문맥교환이 ! 훨씬 경제적 !
Ch3. 병행 프로세스
01. 병행 프로세스
1. 병행 프로세스
(1) 프로세서 하나는 한 번에 프로세스 하나만 실행 가능(1:1)
(2) but.. OS가 프로세서를 빠르게 전환하여 프로세스 시간을 나눠 마치 프로세스 여러 개를 동시에 실행하는 것처럼 보이게 하는 것 = 이게 병행 프로세스
2. 병행 프로세스의 해결 과제
(1) 공유자원을 상호배타적으로 사용해야 함 = 프린터, 통신망 등은 한순간에 프로세스 하나만! 사용 가능
(2) 병행 프로세스 간에는 협력이나 동기화 되어야 함
(3) 두 프로세스 사이에서는 데이터 교환할 수 있도록 통신되어야 함
(4) 프로세스는 동시에 수행하는 다른 프로세스의 실행 속도와 고나계없이 항상 일정한 실행 결과를 보장하도록 결정성(determinancy) 확보 필요
(5) 교착상태(deadlock) 해결하고 병행 프로세스들의 병렬처리능력 극대화 필요
(6) 병행프로세스 수행 과정에서 발생하는 상호배제(=어떤 프로세스가 작업 실행중일 때, 낭머지 프로세스는 그것과 관련된 작업 수행 불가능한 것) 보장해야 함
02. 상호 배제 & 동기화
1. 임계영역(Critical Section)
(1) 임계자원 = 둘 이상의 프로세스들이 동시에 공유할 수 없는XX 자원, 임계영역 = 프로그램에서 임계자원을 이용하는 영역
(2) 프로세스가 공유데이터를 액세스하는 동안 그 프로세스는 임계영역 내에 있다고 함. 프로세스들이 공유데이터 통해 협력할 때, 어떤 프로세스가 임계영역 내에 들어가면 - 다른 프로세스들은 모든 임계영역으로의 진입 금지되어야 함
(3) 임계영역에서는 한 순간 반드시 only 하나의 프로그램만! 허용됨
(4) 프로세스는 임계영역 내에서 보류(block) 되어서는 안 되고 + 무한루프에 빠지지 않아야 함
+) 임계영역 문제 해결하기 위한 조건 3
1. 상호배제 : 프로세스 Pi가 임계영역을 수행 중일 때 어떤 다른 프로세스도 임계영역 수행 불가
2. 진행 : 임계영역 수행하는 프로세스가 없고, 여러 개의 프로세스들이 임계영역에 들어오려고 할 때 - 잔류영역에서 처리하지 않은 프로세스 중 다음에 임계영역에서 수행시킬 대상이 되며, 이 결정은 무한정 연기될 수 없음
3. 제한된 대기 : 한 프로세스가 임계영역에 대한 요청 후부터 ~ 요청이 수락되기까지의 기간 내에 다른 프로세스가 임계영역을 수행할 수 있는 횟수에 제한이 있어야 함(요청 후부터 요청 수락까지의 대기는 무한이 아님)
+) 상호배제 방법 4
1. 데커의 알고리즘(Dekker's algorithm) : 두 프로세스가 서로 통신하기 위해 공유메모리를 사용하여, 충돌 없이 단일자원 공유 가능하도록 허용
2. TestAndSet 명령어 : 기계를 비교하거나 단어 내용ㅇ르 검사, 수정하는 특별한 하드웨어 명령어(TestAndSet) 사용
3. 세마포어(Semaphore) : 세마포어 변수값이 true일 때 프로세스 상태를 확인하는 동기화 도구
4. 모니터(Monitor) : 공유자원과 이것의 임계영역을 관리하는 병행프로그래밍 구조
2. 세마포어(Semaphore)
(1) 다익스트라(Dijkstra)에 의해 제안됨
(2) 상호배제 해결을 위한 동기 도구
(3) 세마포어 = 플래그로 사용되는, 음이 아닌 정수값을 갖는 변수
(4) 세마포어의 두 가지 동작 중 P는 검사(proberen), V는 증가(verhogen)
+) 뮤텍스(Mutex) = mutual exclusion 상호배제라는 뜻, 세마포어와 비교하는 문제가 많이 나온다
3. 모니터(Monitor)
(1) 공유 데이터, 임계영역이 코딩된 프로시저, 초기화 코드로 구성된 모듈 ← 이 모듈에는 데이터 정의와 프로시저의 독점적 제어가 모두 포함되어 있음
(2) 초기화 코드는 모니터 생성시에만 사용하고, 공유데이터의 변수는 모니터 내부에 있는 프로시저로만 접근 가능
(3) 프로세스들은 모니터의 프로시저를 호출, 실행하여 모니터 안에 진입 후, 원하는 공유데이터에 접근 가능
(4) 항상 한 번에 프로세스 하나만 모니터에 진입할 수 있도록 제한하여 상호배제 실현!
+) 세마포어와 비슷한 역할 but 제어 쉬움
+) 한 순간에 하나의 프로세스만 모니터 안에서 활동하도록 보장
+) 모니터의 지역변수들은 지역 프로시저에 의해서만 접근 가능
Ch4. 교착상태(Deadlock)
01. 교착상태 정의
(1) 교착상태(Deadlock)란? @ 다중프로그래밍 시스템, 결코 일어나지 않을 사건을 기다리고 있는 프로세스를 '교착상태'에 빠졌다고 함
(2) 임의의 프로세스 집합에서, 그 집합 내의 각각의 프로세스가 그 집합 내의 다른 프로세스에 의해서만 발생될 사건(event)를 서로 기다리는 상태
(3) 교착상태 필요조건 4 : 상호배제(Mutual Exclution), 점유와 대기(Hold and Wait), 비선점(No Preemption), 순환대기(환형대기, Circular Wait)
+) 정상적인 프로세스의 자원 이용순서는 : 자원요청 → 자원사용 → 자원해제 < 이렇게임
02. 자원할당 그래프
(1) 프로세스(Pn) → 자원(Rn) 연결선 = 요청간선(request edge) = 프로세스가 자원을 요청하는 것, 현재 이 자원을 기다리고 있는 상태
(2) 자원(Rn) → 프로세스(Pn) 연결선 = 할당간선(assignment edge) = 자원이 프로세스에 할당된 것을 의미
(3) 사각형 : 자원, 원 : 프로세스
(4) 사이클 없으면 데드락 X
사이클 있으면? if 각 자원 유형마다 하나씩의 자원밖에 없다면 → 무조건 교착상태 발생!
else if 각 자원 유형마다 여러 개의 자원이 있다면 → 교착상태 발생 가능성 있음
(그래프 봤을 때, 어떤 프로세스가 할당된 어떤 자원을 해제하면 그게 바로 다른 프로세스에 할당하면서 사이클이 없어지는 경우도 있는데 이러면 데드락x)
03. 교착상태 처리 기법
1. 교착상태 예방 : 상호배제 제외 3가지 필요조건 中 하나를 부정함으로써 교착상태 가능성 제거
(1) 점유와 대기 < 조건 부정
- 각 프로세스는 한 번에 자기가 필요한 모든 자원을 요구해야 하며, 만족되지 않으면 작업 진행 불가
(2) 비선점 < 조건 부정
- if 어떤 자원을 갖고있는 프로세스가 더 이상 요구가 허용되지 않으면? 원래 점유한 자원 반납하고, 필요할 때 다시 그 자원이나 다른 자원 요구해야 함
(3) 순환대기 < 조건 부정
- 모든 프로세스에 각 자원 유형별로 '할당순서' 부여 후, 순서에 따라 자원 요구할 수 있게 함
2. 교착상태 회피
(1) 은행가 알고리즘(Banker's algorithm) 이용 : 프로세스가 어떤 자원을 요청하고, 이 자원을 할당했을 때 교착상태 발생 가능성 있다면 → 자원 할당 안 해줌 🙅
(2) 시스템의 상태 '안정' = 운영체제가 현재 모든 사용자에게 그들 모두의 작업이 일정 기간 내에 끝나게 해줄 수 있다 ↔︎ '불안정' 은 못해준다
(3) 안정상태(교착상태 포함) / 불안정상태. = 모든 불안정상태가 데드락은X, 데드락은 전부 불안정상태 O
3. 교착상태 탐지
(1) 시스템이 교착상태 예방 알고리즘 사용 안 하면? 교착상태 발생 가능
(2) 교착상태 발생 여부 파악 위해 시스템의 상태 검사하는 교착상태 탐지 알고리즘 수행
(3) 교착상태 파악 위한 교.탐 알고리즘의 수행 시기 결정은 어려움ㅠ
(4) 교.탐 알고리즘 자주 실행하면 시스템 성능 떨어짐 ↓
4. 교착상태 회복
(1) 프로세스 중지
- 교착상태 프로세스 모두 중지
- 교착상태 해결될때까지 한 프로세스씩 중지
- 종료할 프로세스를 우선순위에 따라 선택
(2) 자원선점
- 희생자의 선택: 비용 최소화 위해 선점 순서 결정
- 복귀 : 프로세스 중지하여 완전히 복귀시키고 재시작
- 기아 : 동일한 프로세스가 항상 희생자로 선택되기 쉬움
'기타' 카테고리의 다른 글
경험면접 준비과정 기록 (2) | 2024.11.22 |
---|---|
1차면접(실무면접) 준비 정리(~ing) (30) | 2024.11.21 |
[CS] 운영체제론 정리(2/2) (2) | 2024.10.31 |
8/29 오늘의 취준 (0) | 2024.08.28 |
m2 맥북에서 토익, 오픽 성적표 pdf파일 받는 방법 (3) | 2024.08.28 |