운영체제 22
-
Multiple Processes 1. Multiprogramming 메모리를 잘라서 여러 프로그램들을 메모리에 집어 넣고, 이 프로그램들을 번갈아가면서 실행한다. → 이 경우, CPU의 개수는 상관이 없다 2. Multiprocessing CPU가 N개가 있을 때, 프로그램들이 동시에 실행되는 것 ⇒ CPU가 하나일 때는 Multi-Processing 이라고 말할 수 없다. Multi-Programming 을 포함한다. 3. Distributed Processing 각각 하나씩 CPU와 OS를 갖고 있는 컴퓨터들을 하나의 네트워크로 연결해서,원래 있던 OS위에 하나의 OS Layer (Distributed OS)를 덮어서,여러개의 CPU를 갖고 있는 것처럼 실행한다. ⇒ 프로세스들이 여러군데에서 동시에..
-
Semaphore를 사용할 때 어떤 상황에서 프로세스가 기다려야 하는가? 프로세스가 몇 개의 Queue로 나뉘어져 관리가 되어야 하는가? → Queue의 개수를 결정해야 한다. Queue의 수만큼 Semaphore를 생성한다. → Semaphore 1개당 Queue 1개 Semaphore에는 딱 두가지 함수만이 존재한다. → 이 두가지 함수만으로 다양한 동기화 문제를 해결할 수 있다. semWait semSignal Bounded Buffer using Semaphores 위의 코드에서 세마포는 3가지가 존재한다. s → Queue에 Produce와 Consumer가 섞여서 들어간다. n → Queue에 Consumer만이 들어간다. e → Queue에 Producer만이 들어간다. Producer Pr..
-
Semaphore semWait : Process 를 Block 시킬 수 있는 명령어이다. semSignal : 내가 아니라 Queue에 있는 프로세스를 Ready로 옮겨 실행할 수 있게 해준다. Semaphore는 Critical Section뿐 아니라, 많은 동기화 문제에 사용된다. ↳ 특히 Critical Section을 다룰 때는 무조건 초기 세마포 변수 값을 1로 설정해야 한다! Race Condition : 실행 순서에 따라 결과가 어떻게 될지 모르는 상황 → 여러 프로세스가 Critical Section 을 동시 접근할 때 발생한다. 어느 위치에 semWait과 semSignal를 사용할지 잘 선택해야 한다. Mutual Exclusion Using Semaphore 하늘색 네모 부분은 해당..
-
Requirements for Mutual Exclusion Mutual Exclusion Mutual Exclusion : 전체 코드가 아닌, Critical Section code 가 한 번에 하나의 프로세스만 실행할 수 있도록 하는 것. Mutual Exclusion 은 어떠한 경우에도 지켜져야 한다. 오직 하나의 프로세스만 Critical Section 의 자원에 접근할 수 있다. → Critical Section Code 가 아닌 코드는 막 섞여서(interleaving, overlapping) 실행되어도 상관 없다. Critical Section Code 와 Non-Critical Section Code 가 섞여 실행되는 것도 상관 없다. ⇒ Non-Critical Section Code 와 ..
-
🌟 Mutual Exclusion: Software Approach (3) 🌟 Mutual Exclusion이 지켜지는 것 중요 DeadLock이 걸릴 경우의 수 존재 → 둘 다 true이면 while문을 둘 다 돌게 된다. 🌟 Mutual Exclusion: Software Approach (4) 🌟 DeadLock과 LiveLock의 차이점 = while문을 빠져나올 가능성 내가 Critical Section에 들어가려면, while문 마지막에 본인 flag를 true로 바꾸고 while문에 있는 상대편 flag가 false인 것을 보고 Critical Section에 진입하기 때문에 Mutual Exclusion이 성립한다. LiveLock이 걸릴 가능성이 있다. → 한 줄 한 줄 번갈아가며 TIM..
-
Multiple Processes 최신 운영체제 설계의 핵심은 여러 프로세스 를 관리하는 것이다. 시스템이 프로그램을 1개만 실행한다면, OS가 복잡할 이유가 없다. ⇒ 시스템이 여러 프로그램을 동시에 실행하려고 하기에 문제가 발생하고 이를 해결하기 위해 OS가 복잡해지는 것이다. 여러가지 프로그램을 실행시킨다고 할 때 사용하는 용어가 세가지 존재한다. 1. Multiprogramming 메모리를 잘라서 여러 프로그램들을 메모리에 집어 넣고, 이 프로그램들을 번갈아가면서 실행한다. → 이 경우, CPU의 개수는 상관이 없다 . 메모리 안에 여러 프로그램이 들어가서 번갈아가며 실행되기만 하면 Multi-Programming 이라고 할 수 있다. 2. Multiprocessing CPU가 N개가 있을 때, ..
-
fork() Parent Process가 Child Process를 만들라는 명령어 → Child Process는 Parent Process의 모든 코드를 copy해간다. int main(){ int i; fork(); for(i=0;i Thread 생성 시간 프로세스 생성 → 모든 것을 copy 해야한다. 프로 독립된 구조체이다. 즉, 프로세스는 복사하게 되면 많은 양의 정보들을 복사해야하기 때문에 생성시간이 길어진다. ⇒ 생성시간도 길어지게 되고, 없앨 때도 메모리, 자원, 스위칭 시간 등등을 할당된 자원을 다시 반납해야 하기 때문에 소요시간이 길어지게 된다. ↔ 하지만, Thread는 프로그램 코드와 데이터를 Share 를 할 수 있기 때문에 모든 것을 copy할 필요가 없다. ⇒ 생성시간이 줄어들..
-
OS 또한 Program이기에 Memory의 공간을 차지한다. tree가 pointer와 연결되어 있다. Primary Processiable 또한 OS에서 관리한다. Swapping Area에는 하드디스크일지라도 File Area에 들어 있는 실행 파일과 다르게 Code + Data + PCB + Stack이 모두 포함된 Process 상태로 저장되어 있다. Process Description OS가 Process를 어떻게 관리하는지가 중요하다. Operating System Control Structure 1. 각각의 Process와 여러가지 Resource의 Current Status에 대한 정보를 관리한다. 2. OS는 System 내부 자원 관리를 위해 다음의 네가지 테이블을 만들어서 관리한다...