1.프로세스 개념(Process Concept)

- 실행중인 프로그램, 실행 파일이 메모리에 적재될 때 프로그램은 프로세스가 된다.      


1-1.프로세스 상태

- 새로운(new), 실행(running), 대기(waiting), 준비완료(ready), 종료(terminated)


Abraham Silberschatz , Peter B. Galvin, Greg Gagne Operating System Concepts 지음 | 조유근, 고건, 김영찬, 박민규 옮김 | 홍릉과학출판사 | 2013년 02월 15일 출간, p.114


1-2.프로세스 제어 블록(PCB, Process Control Block)

- 특정 프로세스와 연관된 여러 정보를 수록한다. 

- 프로세스 상태, 프로그램 카운터(다음에 실행할 명령어의 주소)CPU 레지스터, CPU-스케줄링 정보, 메모리 관리 정보, 회계 정보, 입출력 상태 정보


1-3.스레드(Threads)

- CPU 이용의 기본 단위이다. 

- 스레드를 지원하는 시스템에서는 PCB에 각 스레드에 관한 정보를 포함하도록 확장한다. 

- 자세한 내용은 추후 포스팅 예정


2.프로세스 스케줄링(Process Scheduling)

- 다중 프로그래밍의 목적은 CPU 이용을 최대화하기 위하여 항상 어떤 프로세스가 실행중이도록 하는데 있다. 


2-1.스케줄링 큐

- 프로세스가 시스템에 들어오면 잡큐에 놓여진다. 

- 연결 리스트 형식이다. 

- 준비완료 상태에서 실행을 대기하는 프로세스들은 준비완료 큐(read Queue)라 불리는 리스트상에 유지된다. 

- read Queue의 헤더엔 리스트의 첫 번째와 마지막 PCB를 가리키는 포인터를 포함한다. 

- 특정 입출력 장치를 대기하는 프로세스들의 리스트를 장치 큐(device Queue)라고 한다. 

- 각 장치는 장치 큐를 가진다. 

- 프로세스에 CPU가 할당되어 실행되면 다음 중 하나가 발생할 수 있다.  

a.프로세스가 입출력을 요청하여 입출력 큐에 넣어질 수 있다. 

b.프로세스가 새로운 서브 프로세스를 생성하고 그 프로세스의 종료를 기다릴 수 있다.

c.프로세스가 인터럽트의 결과에 따라 강제로 CPU로부터 제거되어 준비완료 큐에 다시 놓일 수 있다. 


2-2.스케줄러

- 장기 스케줄러(잡 스케줄러) = 실행 준비가 완료되어 있는 프로세스들을 선택하여 실행하기 위해 메모리로 적재한다. 

- 단기 스케줄러(CPU 스케줄러) = 실행 준비가 완료되어 잇는 프로세스들 중에서 선택하며 이들 중 하나에게 CPU를 할당한다. 

- UNIX와  Micro Windows 같은 시분할 시스템들은 장기 스케줄러가 없으면 모든 새로운 프로세스를 단기 스케줄러를 위하여 단순히 메로리에 넣는다. 이들 시스템들의 ㅇ나정성은 물리적인 제한이나 사용자들의 자체 조정 본능에 의존한다. 

- 시분할 시스템과 같은 일부 운영체제들은 추가로 중기 스케줄링(medium-term sechdular)을 도입한다. 

 

Abraham Silberschatz , Peter B. Galvin, Greg Gagne Operating System Concepts 지음 | 조유근, 고건, 김영찬, 박민규 옮김 | 홍릉과학출판사 | 2013년 02월 15일 출간, p.120

- 중기 스케줄러의 핵심 아이디어는 메모리에서 프로세스들을 제거하여, 즉 CPU를 위한 경쟁에서 제거하여 다중 프로그래밍의 정도를 완화하는 것이 바람직할 때도 있다는 것이다. 이러한 기법을 스와핑(swaping)이라고 한다. 

2-3.문맥 교환(Context Switch)

- CPU를 다른 프로세스로 교환하려면 현재 프로세스의 상태를 저장하고 다른 프로세스의 저장된 상태를 복구하는 작업이 필요, 이 작업을 Context Switch라고 한다. 

- Context Switch가 발생하는 시간 동안 시스템은 아무일을 못하기에 순수한 오버헤드이다. 


3.프로세스에 대한 연산(Operation on Processes)

- 대부분의 시스템 내의 프로세스들은 병행 실행될 수 있으며, 반드시 동적으로 생성되고, 제거될 수 있다. 


3-1.프로세스 생성

- 생성하는 프로세스를 부모 프로세스, 새로운 프로세스를 자식 프로세스라고 부른다. 

- 트리의 형태이다. 

- 대부분의 운영체제는 프로세스 식별자(PID)로 구분한다.

- 서브 프로세스는 O/S로 직접 자원을 얻거나 부모 프로세스 자원의 부분 집합을 사용하도록 강요받을 수 있다. 

- 부모 프로세스는 자원을 분할하여 자식들에게 나누어 주거나 일부 자원을 공유할 수도 있다. 

- 프로세스가 생성될 때 초기화 자료(입력된)가 부모 프로세스에서 자식 프로세스로 전달 될 수 있다. 

- 프로세스 생성시 실행과 관련하여 두 가지 가능성이 있다. 

a.부모가 자식과 병렬로 실행된다. 

b.부모가 모든 자식 또는 일부 자식이 끝날때까지 기다린다. 

- 새로운 프로세스들의 주소 공간 측면에서 볼때 다음과 같은 두 가지 가능성이 있다. 

a.자식 프로세스는 부모 프로세스의 복사본이다.

b.자식 프로세스가 자신에게 적재될 새로운 프로그램을 갖고있다.

- 새로운 프로세스는 원래 프로세스의 주소 공간의 복사본으로 구성된다. 두 프로세스(부모와 자식)의 한가지 다른 점은 fork()의 반환 코드가 서로 다르다는 것이다. (자식 프로세스를 위한 PID의 값은 0이고, 부모 프로세스의 PID값은 0보다 큰 정수 값이라는 것이다. 

- fork()후 두 process중 하나를 자신의 메모리 공간을 새로운 프로그램으로 바꾸기 위하여 exec()을 호출한다. 

- exec()시스템 호출은 이진 파일을 메모리로 적재하고 실행한다. 

- 부모는 wait()시스템 호출로 자식 프로세스가 끝나길 기다린다. 자식은 암시적이거나 명시적으로 exit()를 사용


Abraham Silberschatz , Peter B. Galvin, Greg Gagne Operating System Concepts 지음 | 조유근, 고건, 김영찬, 박민규 옮김 | 홍릉과학출판사 | 2013년 02월 15일 출간, p.125


3-2.프로세스 종료

- exit()이 호출된 시점에서 부모 프로세스에게 상태값을 반환하고 자원은 O/S에 반납한다. 

- 또 다른 방법으로도 프로세스가 종료될 수 있다. 그 방법은 다른 프로세스가 임의로 종료시킬 수 있다. (보통은 부모만 가능)

- 부모는 다음과 같은 이유로 자식들을 종료한다.

a.자식이 할당된 자원을 초과할때

b.자식에게 할당된 태스크가 더 이상 필요 없을때

c.부모가 exit하는데, 운영체제는 부모가 exit한 후 자식의 실행을 계속하는 것을 허용하지 않는 경


4.프로세스간 통신(Interprocess Communication)

- 협력 프로세스간 데이터 교환을 위한 프로세스간 통신 기법을 필요로 한다. 

- 프로세스간 통신은 기본적으로 공유 메모리, 메시지 전달 두 가지 모델이 있다.

- 공유 메모리 모델은 최대 속도와 편이를 제공한다. 

- 메시지 전달 모델은 충돌을 회피할 필요가 없기 때문에 적은양의 데이터를 교환하는데 유용한다. 


5.클라이언트 서버 환경에서 통신(Communication in Client-Server System)

- 공유 메모리와 메시지 전달 기법은 클라이언트-서버 시스템의 통신에도 사용할 수 있다. 

- 추가적인 통신 전략으로 소켓, 원격 프로시저 호출(RPCs), 파이프가 있다. 


'IT > 운영체제' 카테고리의 다른 글

CPU스케줄링  (0) 2016.12.20
스레드(다중 스레드 프로그래밍)  (0) 2016.11.29
운영체제(operating system)이란?  (0) 2016.11.23
운영체제 포스팅에 앞서...  (0) 2016.11.23

+ Recent posts