목록CS 지식/운영체제 (15)
하다보니
교착상태. 일부 자원을 가지고 있으면서 상대방의 자원을 요구. Deadlock- 일련의 프로세스들이 서로가 가진 자원을 기다리며 block 된 상태. Resource(자원) - 하드웨어, 소프트웨어 등을 포함하는 개념. ex) memory space, semaphore 등. 프로세스가 자원을 사용하는 절차 Request-> Allocate -> Use ->Release Deadlock 발생의 4가지 조건. - Mutual exclusion (상호 배제) : 매 순간 하나의 프로세스만이 자원을 사용할 수 있음. - No preemption (비선점) : 프로세스는 자원을 스스로 내어놓을 뿐 강제로 빼앗기지 않음 - Hold and Wait(보유 대기) : 자원을 가진 프로세스가 다른 자원을 기다릴 때 보유..
프로세스 동기화. concurrency control이라고도 부른다. (병행 제어) 세마포어는 P연산과 V연산으로 구성되는 추상 자료형. monitor. - 프로그래밍 언어 차원에서 공유 데이터에 접근하는 문제를 monitor가 해결해서 프로그래머의 부담을 덜어주는 것. 공유 데이터 접근시 접근하는 코드를 모니터에 정의해서 해당 코드로만 공유데이터에 접근할 수 있게 한다. 모니터는 active한 프로세스가 하나만이 공유데이터에 접근할 수 있게 해준다. 모니터를 쓰고 있던 프로세스가 다 쓰고 나가든지 잠들던지 하면 대기하던 프로세스가 들어온다. 모니터에선 lock이 필요없다. condition variable. 값을 가지는 변수가 아닌 어떤 프로세스를 잠들게 하고 줄세우게 하기 위한 변수이다. wait와 ..
Classical problems of shynchronization 1. bounded-buffer problem. - 버퍼의 크기가 유한한 환경에서 producer-consumer problem. 생산자 소비자 문제 발생. producer 프로세스와 consumer 프로세스 존재. 각각 여러개 존재. producer는 공유 버퍼에 데이터를 하나 만들어서 집어 넣는 역할을 한다. producer 1. empty 버퍼가 있는가?- 없으면 기다림. 2. 공유 데이터에 lock을 건다. 3. empty buffer에 데이터 입력 및 buffer 조작 4. lock을 푼다. 5. full buffer 하나 증가. consumer 1. full 버퍼가 있나요? - 없으면 기다림 2. 공유 데이터에 lock을 건..
Semaphores 추상 자료형이란 object와 operation으로 구성된다. 세마포어도 추상 자료형이다. 정수 값을 가질 수 있고 해당 정수 값이 자원의 개수라고 생각하면 된다. operation은 2가지 연산이 정의되어 있다. P연산과 V연산이 정의된다. 해당 연산은 공유자원을 획득하고 반납하는 것을 처리해준다. P연산은 세마포어 변수 값을 획득하는 과정이고 V연산은 다 사용하고 나서 반납하는 과정이다. lock을 걸고 푸는 방식은 semaphore 변수가 1인 경우를 생각하면 된다. P연산을 lock을 거는 과정 V연산은 lock을 푸는 과정이다. Semaphore S P(S): while(S
공유 데이터에 접근하는 코드를 critical section이라고 한다. critical section 문제를 해결하기 위한 해결법의 충족 조건 mutual exclusion(상호 배제) - 프로세스 p1가 critical section 부분을 수행 중이면 다른 모든 프로세스들은 그들의 critical section에 들어가면 안된다. progress(진행) - 아무도 critical section에 있지 않은 상태에서 critical section에 들어가고자 하는 프로세스가 있으면 critical section에 들어가게 해주어야 한다. Bounded Waiting(유한 대기) - 특정 프로세스 입장에서 critical section에 못 들어가고 지나치게 오래 기다리는 starvation이 생기지 ..
Round Robin은 cpu를 기다리는 시간이 사용하려는 시간에 비례해서 어느 정도 공정성을 보장한다. multilevel queue는 여러 줄로 선다. 위로갈수록 우선순위가 높다. 우선순위에 따라 cpu가 부여된다. ready queue를 여러 개로 분할(여러 줄) - foreground queue와 background queue가 있다. 각 큐의 특성에 맞는 스케줄링 방법을 적용해야 한다. - 우선 순위 높은 줄에 cpu를 준다. starvation이 발생할 수도 있다. - time slice : 각 큐에 cpu time을 적절한 비율로 할당. ex) 80%는 우선순위 높은 곳에 주고 20%는 우선순위 낮은 곳에 준다. foreground queue(interactive)- round robin을 ..
cpu scheduling algorithms - nonpreemtive(강제로 빼앗지 않는 방법)-비선점형 - preemtive(강제로 빼앗는 방법)- 선점형 성능 척도- performance index, scheduling criteria 시스템 입장에서 성능 척도. - cpu utilization(이용률) - 전체 시간 중에서 cpu가 놀지 않고 일한 시간 비율 - throughput(처리량) - 주어진 시간 동안 몇 개의 작업을 하느냐. 프로그램 입장에서 성능 척도 - 시간이 빨리 처리되는 것이 중요하다. - turnaround time(소요시간. 반환 시간) - cpu를 사용한 시간. 즉 특정 프로세스 수행 시간( cpu를 쓰러 들어와서 i/o 작업을 하러 나가기 전까지의 시간) - waitin..
부모 프로세스의 문맥을 모두 복사해서 자식 프로세스를 만든다. code data stack, cpu 문맥, program counter 모두 복사한다. 프로세스가 만들어지고 난 후에는 독립적인 프로세스이기 때문에 부모와 경쟁한다. 자식이 부모의 주소 공간을 공유한다. copy-on-write(COW) 기법. write가 발생했을 때 그때 copy 하겠다는 말이다. write라는 것은 내용이 바뀌는 것을 말한다. 그전에는 부모의 자원을 공유하고 있다가 자식 프로세스에 write가 발생해서 변화가 생기면 copy 하게 된다. 운영체제에 부모 프로세스가 자식 프로세스의 생성을 요청한다. 부모와 자식이 공존하며 수행되는 모델과 자식이 종료될 때까지 부모가 기다리는 모델이 있다. fork() 시스템 콜. int ..
프로세스 생성. 부모 프로세스(parent process)가 자식 프로세스(children process)를 생성한다. 복제 생성을 하게 된다. 부모 프로세스는 1개. 자식 프로세스는 여러 개가 될 수 있다. 프로세스의 트리(계층 구조) 형성. 프로세스는 자원을 필요로 한다. - 운영체제로부터 받는다. 부모와 자식이 자원을 공유하는 경우도 있고 아닌 경우도 있다. 공유하게 되면 경쟁하게 되어서 일반적으로는 공유하지 않는다. 부모와 자식이 공존하면서 수행되는 모델이 있고 자식이 종료될 때까지 부모가 기다리는 모델도 있다. - 주소 공간(address space) 자식은 부모의 공간을 복사한다. (binary and OS data) 자식은 그 공간에 새로운 프로그램을 올림. fork() 시스템 콜이 새로운 ..
동기식 입출력은 입출력 요청을 한 프로세스가 입출력이 끝날 때까지 아무 일도 안 하고 기다린다. 비동기식 입출력은 사용자 프로세스가 입출력 요청을 하고 입출력이 진행되는 동안에 cpu를 곧바로 잡아서 무엇인가 instruction을 수행하는 것을 말한다. 두 개의 차이는 프로세스가 입출력이 진행되는 동안에 instruction을 실행하느냐 안 하느냐의 차이이다. 스레드는 프로세스 내부에 cpu 실행 단위가 여러개 있는 경우에 그것을 말한다. 프로세스 하나에 cpu 수행 단위만 여러개 두는 것을 스레드라고 한다. 프로세스 하나에서 공유할 수 있는 것은 최대한 공유한다. program counter, register, stack은 별도로 갖는다. 스레드가 동료 스레드와 공유하는 부분(task라고 부른다. t..