Skip to content

태그: process

교착상태와 스케줄링
process
탐지 detection 교착상태를 탐지하는 알고리즘 필요 즉시할당하지 못하거나 CPU 사용률이 40% 이하로 떨어지는 경우 호출 탐지 자주실행하면 성능 저하 교착상태에 빠진 프로세스를 빨리 발견 -유휴상태 방지 가능 자원할당 그래프를 활용하여 탐지 교착 탐지시 회복(복구)과정 필요 회복 recovery 강제종료 교착을 일으킨 모든 프로세스 중지 (비용큼) 교착이 해결될 때 까지 하나씩 중지 (오버헤드 큼) 교착 프로세스가 점유하는 자원을 다른 프로세스가 선점하게 함 우선순위가 낮은 프로세스 매번 결과를 기록해서 선점 횟수에 따라 할당해주지 않으면 기아 발생 가능성 있음 프로세스 스케줄링 다중프로그래밍 시스템 I/O Burst, CPU Burst 종류 장기스케줄러 (준비-생성) 어떤 프로세
생산자 소비자 문제
process
생산자-소비자 문제(producer-consumer problem)는 여러 개의 프로세스를 어떻게 동기화할 것인가에 관한 고전적인 문제이다. 한정 버퍼 문제(bounded-buffer problem)라고도 한다. 유한한 개수의 물건(데이터)을 임시로 보관하는 보관함(버퍼)에 여러 명의 생산자들과 소비자들이 접근한다. 생산자는 물건이 하나 만들어지면 그 공간에 저장한다. 이때 저장할 공간이 없는 문제가 발생할 수 있다. 소비자는 물건이 필요할 때 보관함에서 물건을 하나 가져온다. 이 때는 소비할 물건이 없는 문제가 발생할 수 있다. 이 문제를 해결하는 것을 생산자-소비자 협동이라 하며, 버퍼가 동기화되어 정상적으로 동작하는 상태를 뜻한다. 문제를 해결하기 위해 세마포어를 활용할 수 있다. 방법 1 변수 Em
임계영역과 상호배제
process
임계 영역(Critical Section) 공유자원에 접근하는 프로세스 내부의 코드 영역으로 어떤 한 프로세스가 한 영역의 데이터를 사용하고 있을 때, 다른 프로세스가 그 영역의 데이터를 같이 사용한다면 코드상에서 문제가 발생할 수 있다. 따라서 문제가 발생하지 않도록 특정 영역 내의 한번에 하나의 프로세스만 이용하게끔 보장해야해한다. 그러한 영역을 임계영역이라고 부든다. 임계 영역의 문제를 해결하기 위해서는 아래 3가지 조건을 충족해야 한다. 상호배제 하나의 프로세스가 임계 영역에 들어가있다면 다른 프로세스는 들어갈 수 없어야 한다. 진행 임계 영역에 들어간 프로세스가 없는 상태에서 들어가려 하는 프로세스가 여러개라면 어느 것이 들어갈지 결정해주어야 한다. 한정 대기 다른 프
프로세스의 개념
process
프로세스(process)는 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램을 의미한다. 프로세스 내부에는 최소 하나의 스레드(thread)를 가지고있는데, 실제로는 스레드(thread)단위로 스케줄링이 이뤄진다. 하드디스크에 있는 프로그램을 실행하면, 실행을 위해서 메모리 할당이 이루어지고, 할당된 메모리 공간으로 바이너리 코드가 올라가게 된다. 이 순간부터 프로세스라 불린다. Processs memory Code 영역 : 프로그램을 실행시키는 실행 파일 내의 명령어(소스코드) Data 영역 : 전역변수, static 변수 Heap 영역 : 동적할당을 위한 메모리 영역. C언어 : malloc &x26; free // C++ : new &x26; delete // JAVA : new 등 Stac
프로세스의 관리
process
대부분의 시스템에서 프로세스는 동시에 실행될 수 있고, 이들은 동적으로 생성되거나 삭제될 수 있다. Process Creation (프로세스 생성) 프로세스는 트리(계층) 구조로 되어있다. 프로세스는 PCB에 저장된 pid(process identifier)값을 통해서 식별되고 관리된다. 또 프로세스는 자원이 필요한데, 자원은 운영체제로 부터 받거나 부모와 공유한다. 프로세스 생성 세부 작업 순서 새로운 프로세스에 PID 할당 주소 공간과 PCB 공간 할당 PCB 초기화(프로세스 상태, 카운터 등 초기화, 자원 요청 등) 링크 걸기 (해당 큐에 삽입) fork() 프로세스의 생성은 fork() 시스템 콜을 이용한다. fork()를 이용하면 부모를 그대로 복사하여 현재 프로세스와 pid만