반응형
프로세스
- 프로세스 : 실행중인 프로그램
- 프로그램이 실행되는 순간에 PID(process id) 부여 → 프로그램 이름으로 프로세스들을 구분하기는 어려움
- 프로그램 : 동작을 하지 않는 정적 • 수동적인 개체
- 프로그램을 실행시키려면 CPU, 메모리, 입출력장치, 파일 등의 자원을 할당받아 동작
- 프로세스는 프로그램과 달리 동작을 하는 능동적인 개체로 봄
- 스풀링과 같은 시스템 태스크도 각각 하나의 프로세스가 된다.
- 프로세스의 동작은 CPU가 그 프로세스의 명령들을 실행하는 것
- 운영체제는 실행할 준비가 된 프로세스들이 적절히 CPU를 배정받아 효율적으로 작업을 처리할 수 있도록 관리해야 함
- 결론은 운영체제는 프로세스들을 생성시키고, 종료시키기 위한 작업들과 프로세스들을 실행시키기 위한 스케줄링 작업(CPU 할당)을 처리한다.
각 프로세스의 상태를 관리하며, 필요한 경우 프로세스가 다른 상태로 전이되도록 처리 - 사용자 및 시스템 프로세스가 존재한다.
반응형
프로세스의 상태 변화
- 시스템에서 프로세스가 처리될 때, 프로세스는 생성, 준비, 실행, 대기 ,종료의 다섯 가지 중 하나의 상태에 있게 된다.
- 처음 작업이 주어지면 생성상태에 두고 큐에 넣는다.
- 일부 시스템에서는 작업 스풀러(job spooler or disk controller)가 작업의 특성에 맞는 큐를 생성하고 작업의 주요 특징을 적어 놓아 그 다음에 어느 프로세스를 처리해야 하는지를 결정하는 데 도움을 준다.
- 생성 상태 : 준비상태, 실행 준비는 되었지만 CPU 할당을 기다리는 상태로 전이된다.
- 실행 상태 : 프로세스가 처리되는 상태.
- 대기 상태 : 단일 프로세서 시스템에서는 프로세스가 특정 자원을 할당받을 때까지 또는 I/O 작업이 끝날 때까지 작업이 보류되는 상태
- 종료 상태 : 프로세스의 모든 처리가 완료되어 사용자에게 반환
생성 상태 → 준비 상태
- 미리 정의된 정책에 따라 스케줄러에 의해 호출, 메모리의 이용 가능성과 어떤 장치가 요구되는지를 검사
준비 상태 → 실행 상태
- 사전에 정의된 알고리즘(FCFS, SJF 등)에 따라 스케줄러에 의해 처리
- 이 과정을 디스패치(dispatch)라고 한다.
실행 상태 → 준비 상태
- 할당시간의 만료나 우선순위 알고리즘을 택한 시스템에서 높은 우선순위의 프로세스가 오는 경우 스케줄러에 의해 처리됨.
실행 상태 → 대기 상태
- READ, WRITE 또는 다른 I/O 요구, 페이지 교환을 요구하는 작업 같은 명령 등에 의해 일어난다.
- 위의 작업이 상대적으로 오랜 시간이 걸리기 때문에 그동안 CPU를 다른 프로세스에 할당하여 활용하기 위함
대기 상태 → 준비 상태
- I/O 장치 관리자의 신호에 의해 일어남.
- 페이지 교환의 경우는 페이지 인터럽트 핸들러가 메모리에 그 페이지가 있다는 신호를 보내고 프로세스는 준비 큐에 놓인다.
실행 상태 → 종료 상태
- 프로세스를 성공적으로 끝마친 경우
- 운영체제가 에러 발생을 감지하고 프로세스를 강제로 종료시킨 경우에 스케줄러에 의해 수행
반응형
프로세스 제어 블록
- 프로세스의 관리를 위해 운영체제는 각 프로세스 제어 블록(Process Control Block, PCB)을 두고 여기에 해당하는 프로세스의 정보를 보관
- PCB 내용은 프로세스가 진행함에 따라 변경도 되고, 프로세스가 종료되면 이 제어 블록도 없어지게 된다.
- 프로세스 제어 블록의 주요한 항목
- 프로세스 상태 : 프로세스의 현 상태
- 프로세스 번호(PID) : 프로세스의 기준이 되는 ID
- 프로그램 카운터(PC) : 프로세스 수행을 위한 다음 명령 주소 표시
- 레지스터(register) : CPU의 레지스터에 해당하는 정보 포함. 이는 실행 → 다른 상태로 전이되는 경우 CPU의 레지스터 정보를 이곳에 저장시켜서 나중에 다시 실행 상태로 전이될 때 복구
- 메모리 : 프로세스가 저장된 주소와 가상 메모리를 사용하는 경우에는 가상 주소와 실제 주소의 사상(mapping) 정보, 기준 레지스터(base register)와 경계 레지스터(bound register) 등의 정보 포함
- 프로세스 우선순위 : 시스템에 의해 사용. 우선순위를 이용하여 스케줄링 시 어떤 작업을 선택할 것인가를 결정하는 데 필요한 정보를 포함
- 회계 정보 : 주로 성능 측정과 순위에 대한 목적을 위한 정보
반응형
프로세스의 생성과 종료
프로세스 생성
- 프로세스는 실행과정 동안 프로세스 생성 시스템 호출을 이용하여 여러 개의 프로세스 생성
- 이 프로세스를 부모 프로세스, 생성된 새로운 프로세스는 자식 프로세스
- 프로세스 생성
- 프로세스 이름 결정(PID)
- 프로세스 준비 삽입 큐에 적재
- 프로세스 초기 우선순위 부여
- 그 프로세스에 대한 제어 블록을 만듦
- 새로운 프로세스는 fork() 시스템 호출에 의해 생성된다.
- 일반적으로 프로세스는 작업을 수행하기 위해 지원이 필요하다.
- 한 프로세스가 자식 프로세스를 생성하면 생성된 자식 프로세스는 운영체제로부터 직접 자원을 얻거나, 부모 프로세스 자원의 일부를 얻음
- 자식 프로세스의 자원을 부모 프로세스의 자원으로 제한하는 이유는 너무 많은 서브 프로세스를 생성함으로써 시스템에 과부하가 걸리는 것으로 방지
프로세스 종료
- 프로세스는 마지막 문장이 실행을 마쳤을 때 종료
- 부모 프로세스에게 실행 결과를 되롤려줌
- 프로세스가 종료될 때 exit()와 같은 적절한 시스템 호출을 통해 또 다른 프로세스의 종료를 야기할 수 있음. → 이런 시스템 호출은 단지 종료되는 프로세스 부모에 의해서만 호출될 수 있음
- 부모 프로세스가 자식 프로세스 실행을 종료
- 자식 프로세스가 할당된 자원의 사용을 초과할 때
- 자식 프로세스에게 할당된 작업이 더 이상 필요치 않을때
- 연속적 종료 : 어떤 프로세스가 종료된다면 그 자식 프로세스는 모두 종료되어야 함 → 보통 운영체제에 의해 실행된다.
프로세스 간의 관계
독립적 프로세스
- 독립적 프로세스 : 시스템에서 실행 중인 다른 프로세스의 영향을 받지도 않고 주지도 않는 프로세스를 의미
- 특징
- 프로세스의 상태는 다른 프로세스와 공유되지 않는다.
- 프로세스의 실행은 결정적이다. 즉, 실행 결과는 입력상태의 따라서만 결정
- 프로세스의 실행은 재생 가능이다. 즉, 실행 결과는 같은 입력에 대하여 항상 동일
- 프로세스의 실행은 타 프로세스와 무관하게 중단되거나 재시작 될 수 있다.
유기적 프로세스
- 유기적 프로세스 : 시스템에서 실행중인 다른 프로세스의 영향을 주고받으며 동작하는 프로세스
- 특징
- 프로세스의 상태는 다른 프로세스와 공유된다.
- 프로세스의 실행은 비결정적이다. 즉, 실행하는 결과는 실행순서에 좌우되기 때문에 미리 예측할 수 없음
- 프로세스의 실행은 재생 불가능이다. 실행결과는 동일한 입력에 대하여 항상 동일하지는 않음.
반응형
쓰레드
- 일반적으로 다중 프로세싱 시스템에서 기본적인 처리단위는 프로세스라고 할 수 있음
- 프로세스를 처리의 기본 단위로 하는 시스템의 경우 하나의 프로그램을 수행하기 위해 하나의 주소 공간(자원 소유의 단위)과 그 주소 공간 내에서 하나의 제어흐름(디스패칭의 단위)으로 구성되는 프로세스 사용
- 프로세스의 실행단위가 되는 것은 하나의 프로세스 내에서 프로그램이 수행될 때 각각의 실행 단위 시간 안에 하나의 실행점(execution point)만이 존재함을 의미한다.
- 단일 프로세스 내에서 동시처리, 즉 병렬처리가 불가능함
- 쓰레드(thread)는 프로세스 내에서 다중처리를 위해 제안된 개념. 실행 단위를 프로세스에서 한 단계 낮추어 규정한 것
- 자원 소유의 단위와 디스패칭의 단위는 대부분의 운영체제에서 이 두가지 특징은 프로세스의 본질로 다루어지나, 서로 독립적으로서 운영체제에 의해 별도로 취급될 수 있다.
- 디스패칭의 단위 : 보통 쓰레드(thread) 또는 경량 프로세스(lightweight process)라 한다.
- 자원 소유의 단위 : 프로세스 또는 작업이라한다.
- 프로세스 내에는 하나의 쓰레드가 있을 수도 있고 여러 개의 쓰레드가 있을 수도 있다.
- 쓰레드는 제어의 흐름을 의미하며 프로세스에서 실행의 개념만을 분리한 것으로 실행에 필요한 최소한의 정보만을 가지고 프로그램 수행 시 자신이 속해있는 프로세스의 실행 환경을 공유한다.
- 하나의 쓰레드 내에서는 하나의 실행점만이 존재하고 각 쓰레드는 수행에 필요한 최소한의 정보만으로 구성된다.
- 쓰레드도 프로세스와 마찬가지로 생성 → 준비 상태 → 실행 상태 → 대기 상태 → 종료 상태
- 여러 개의 CPU가 있는 경우, 혹은 하나의 CPU에 여러 개의 코어가 있는 경우라면 다중 쓰레드를 병렬로 처리할 수 있다.
- 처리 속도가 서로 다른 경우에 해당되는 작업을 전담하도록 되어 있는 경우라면 속도가 느린 작업 때문에 다른 작업들이 기다릴 필요 없이 효율적으로 처리가 가능하다.
반응형
스케줄링
- 여러 가지 작업들의 처리 순서를 결정 → 주어진 프로세스들이 여러 개인 경우 어떤 순서대로 CPU를 얼마 동안 배정하여 프로세스를 처리할지를 결정하는 스케줄링
스케줄링 단계
- 상위 단계 스케줄링 : 시스템에 들어오는 작업들을 선택하여 프로세스를 생성 후 프로세스 준비 큐에 전달하는 역할. 선택 기준은 시스템 자원을 효율적으로 이용할 수 있도록 함, 보통 입출력(I/O) 중심 작업과 연산 중심 작업을 균형있게 선택하도록 작업 순서 결정
- 하위 단계 스케줄링 : 사용 가능한 CPU를 준비상태의 어느 프로세스에 배당할지 결정. CPU를 배당받은 프로세스는 실행 상태가 되어 프로세스 처리.
프로세스가 준비 상태에서 실행 상태로 바뀌는 것을 디스패치라 한다. → 하위 단계 스케줄링 수행 주체는 디스패처(dispatcher)이다. 이 스케줄링은 빈번하게 발생하므로 디스패처는 언제나 메모리에 상주해 있어야 함. - 중간 단계 스케줄링 : 프로세스를 일시적으로 메모리에서 제거하여 중지(suspending) 시키거나 다시 활성화(activating) 시켜서 시스템에 대한 단기적인 부하를 조절한다.
스케줄링 정책
- 운영체제가 프로세스를 스케줄링할 때 고려하는 기본적인 목표 두 가지는 공정성과 균형이다.
- 공정성 : 모든 프로세스가 적정 수준에서 CPU 작업을 할 수 있게 함
- 균형 : 시스템의 자원들이 충분히 활용될 수 있게 하는 것
- 일괄처리 운영체제는 처리량의 극대화, 반환시간의 최소화, CPU 활용의 극대화를 스케줄링의 목표로 할 수 있다.
- 대화형 운영체제는 빠른 응답시간과 과다한 대기시간 방지를 스케줄링의 목표로 할 수 있다.
- 실시간 운영체제는 처리 기한을 맞추는 것을 스케줄링의 목표로 할 수 있다.
- 처리량(throughput) : 주어진 시간에 처리한 프로세스의 수
- 반환 시간(turnaround time) : 프로세스 생성 시점부터 종료 시점까지의 소요시간
- 응답 시간(response time) : 요청한 시점부터 반응이 시작되는 시점까지의 소요시간
- 대기 시간(waiting time) : 프로세스가 종료될 때까지 준비 큐에서 기다리는 시간의 합
선점 스케줄링 정책
- 진행 중인 작업에 인터럽트를 걸고 다른 작업에 CPU를 할당하는 스케줄링 전략
- 쉽게 말해 사용중인 CPU를 다른 프로세스가 뺏어올 수 있다.
- 선점 스케줄링 정책은 시간 할당 방식에서 주로 사용한다.
- 높은 우선순위의 프로세스가 긴급한 경우에 유용하다. → CPU를 뺏어올 수 있으니
- 실시간 시스템에서 인터럽트가 받아들여지지 않는 경우 결과는 예측할 수 없지만, 선점 스케줄링을 이용하면 필요한 프로세스가 CPU를 선점할 수 있기 때문에 예측이 가능하다.
- 대화식 시분할 시스템에서도 선점 스케줄링은 빠른 응답시간을 유지하는데 필요하다.
- 선점 방식은 경비가 들고 오버헤드를 초래할 수 있다.
- CPU의 모든 레지스터와 기타 운영체제에 따라 요구되는 프로세스의 상태를 문맥(context)이라 한다.
- 프로세스가 종료되지 않은 상태에서 CPU를 뺏어오려면 문맥 교환이 필요하다.
- 문맥 교환(context switching)이란 CPU가 현재 실행하고 있는 프로세스의 문맥(상태)를 프로세스 제어 블록(PCB)에 저장하고, 다음 프로세스의 PCB로부터 문맥을 복원하는 작업이다.
- 문맥 교환에도 일정 부분의 시간과 자원이 사용되기 때문에 문맥 교환에 따른 오버헤드를 고려해야 한다.
비선점 스케줄링 정책
- 프로세스가 CPU를 할당받아 실행이 시작되면 프로세스 자체가 I/O 인터럽트를 걸거나 프로세스를 종료할 때까지 실행상태에 있게 된다. 즉 프로세스가 실행되면 CPU를 다른 프로세스가 뺏을 수 없다.
- 예외적으로 무한 루프를 수행 중인 경우에는 선점이나 비선점에 관계없이 모두 인터럽트가 걸린다.
- 모든 프로세스가 공정하게 순서에 따라 실행되도록 관리한다.
- 우선순위에 관계없이 대기 중인 프로세스는 변동이 없으므로 응답시간의 예측이 가능하다.
- 짧은 작업이 긴 작업을 기다리게 되는 경우가 발생할 수 있다.
반응형