Computer Science

1. Bouned-Buffer Problem 공유 데이터에 관련한 고전적인 '동기화' 문제이다. producer-consumer 문제라고도 한다. 문제점 1) Producer 발생 할 수 있는 문제 : 생산자는 데이터를 만들어서 집어 넣는 역할. 생산자 둘이 동시에 비어있는 버퍼에 도착하는 경우, 동시에 데이터를 생성하게 되면 문제가 발생한다. 해결 방법 : 공유 데이터에 lock 을 걸어서 다른 producer 및 consumer 가 접근하지 못하도록 방지한다. 그 후, 데이터 입력 작업이 끝나면 Lock 을 해제 하여 다른 producer나 consumer가 접근할 수 있도록 한다. 그리고 full buffer를 하나 증가시킨다. (buffer count) 2) Consumer 발생할 수 있는 문제 ..
Critical Section Problem n개의 프로세스가 공유데이터를 동시에 사용하기를 원하는 경우 발생하는 문제 각 프로세스의에서 공유 데이터를 접근하는 코드를 critical section 이라고 한다. 하나의 프로세스가 critical section 에 있을 때 다른 모든 프로세스는 critical section에 들어갈 수 없어야 한다. 임계 구역 문제를 'Software' 적으로 해결하는 방법 Mutual exclusion (상호 배타) : 한 프로세스가 critical section 부분을 수행하고 있다면, 다른 프로세스들은 그들의 critical section 에 들어가지 않는다. 즉, critical section에 꼭 하나의 프로세스만이 진입할 수 있다는 조건이다. Progress ..
스케줄링 알고리즘은 크게 non-preemptive / preemptive 방식으로 나뉘게 된다. Scheduling Criteria 성능 척도 CPU utilization (이용률) : 전체 시간중에서 CPU 가 일한 시간. CPU 는 가능한 busy 해야 한다. - CPU 는 비싼 자원이기 때문에 효율적으로 활용하기 위해서는 CPU 는 항상 일을 해야 한다. Throughput (처리량) : 주어진 시간동안 몇개의 프로세스들을 완료 했는가 Turnaround time (소요시간, 반환시간) : 특정 process를 실행하는데 걸리는 시간 Waiting time (대기 시간) : 프로세스가 ready queue에서 대기하고 있는 시간 Response time (응답 시간) : 요청이 왔을 때 처음으로 ..
CPU & I/O burst CPU burst : CPU를 사용하여 작업하는 부분 I/O burst : I/O 작업을 수행하는 부분 프로그램은 CPU burst 와 I/O burst 번걸아서 연속적으로 실행된다. CPU Burst Time의 분포 I/O bound job : CPU 를 잡고 계산하는 시간 보다 I/O에 많은 시간이 필요한 job 이다. 위의 그래프에서 알 수 있듯이 CPU burst를 짧게, 빈도는 많이 사용할 것이다. CPU bound job : CPU를 잡고 계산을 위주로 하는 job이다. CPU를 길게 연속적으로 사용하며 CPU burst 빈도는 적게 일어난다. 여러 종류의 job (= process) 이 섞여 있기 때문에 CPU 스케줄링을 통해, 자원을 효율적으로 사용해야 한다. ..
프로세스 간 협력 프로세스는 독립적이다. 각자 주소공간을 가지고 수행되기 때문에 원칙적으로 하나의 프로세스는 다른 프로세스의 수행에 영향을 미치지 못한다. 그렇지만 프로세스 간 협력 메커니즘 (Inter Process Communication)을 통해, 하나의 프로세스가 다른 프로세스의 수행에 영향을 미칠 수 있다. IPC에는 크게 message passing 과 shared memory 기법이 있다. Message Passing 원칙적으로 프로세스끼리 직접 통신을 하지 않으므로, 운영체제의 커널을 통해 메세지를 전달하는 방법 1. Direct Communication 통신하려는 프로세스의 이름을 명시적으로 표시하는 방법 커널을 통해 다른 프로세스에게 메세지를 넘긴다. 2. Indirect Communi..
시스템 콜의 종류 4가지에 대해 알아본다. 프로세스 생성, 실행, 종료와 관련된 주요 4가지 시스템 콜은 다음과 같다. fork() : 복제본 child process를 생성한다. exec() : 새로운 프로그램으로 overlay 한다. wait() : child process 작업이 끝날 때까지 sleep 한다. exit() : 모든 resource들을 free 시키고, parent node에게 이를 알린다. fork() 시스템 콜 process는 fork() 시스템 콜에 의해 생성된다. caller 를 복사해서 새로운 주소 공간을 생성한다. fork() 를 통해서 프로세스를 생성하는 예시이다. int main() { int pid; printf("Only parent process print this..
Process 의 생성 부모 프로세스가 자식 프로세스를 생성한다. 프로세스들은 트리 구조 형성하게 된다. 프로세스는 자원을 필요로 한다. 자원은 운영체제로부터 받으며, 부모 프로세스와 자식 프로세스가 일반적으로 공유하지 않는다. 프로세스들끼리는 별개의 프로세스이므로 자원을 위해 경쟁을 하게 되는 것이 일반적이기 때문이다. 수행 - 부모와 자식이 공존하며 수행하는 모델 - 자식이 종료될 때가지 부모가 기다리는 모델 주소 공간 - 자식은 부모의 공간을 복사한다. : process의 문맥 (주소공간인 코드 데이터 스택, PC)을 그대로 복사한다. - 마치 과제할 때 기존에 레포트 템플릿이 있으면 복사하고 일부 수정해서 쓰는 것처럼, 효율적일 것이다. - 자식은 그 공간에 새로운 프로그램을 올린다. UNIX 예..
Thread 의 장점 1. 응답성, 빠른 처리 : 하나의 스레드가 waiting 인 상태 동안에 동일한 task 내의 다른 스레드는 실행될 수 있어서 응답 속도를 높인다. 2. 자원 절약 : 같은 작업을 수행하는 하나의 프로세스 안의 thread들은 자원을 공유하는 부분이 있다. ex) Code, Data 영역 3. 경제성 : process 를 생성하거나 문맥 교환하는 것에 비해 thread는 경제적이다. (Solaris OS 의 경우 생성의 경우 30배, 문맥 교환의 경우 5배 더 절약된다.) 4. Process는 하나지만, thread는 여러개 인 경우 -> 병렬적으로 일할 수 있다. Thread 구현 방법 Kernel Thread : 운영체제 kernel의 지원을 받는다. ex) 하나의 thread..
minjiwoo
'Computer Science' 카테고리의 글 목록 (2 Page)