Operating Systems Chapter 03 프로세스 개념
1. 프로세스 관리 프로세스(process)와 프로그램(program) 보조기억장치에 저장된 프로그램(정적)을 실행 시키기 위해 주 기억장치로 옮기면 이는 프로세스(동적)가 된다. “프로그램을 작성한다”, “프로세스를 실행시킨다”. 프로세스 : 시스템의 작업 단위를 말하며 다음의 정보가 필요 PID(Process IDentification) : 주 기억 장치내 여러 개의 프로세스가 상주하므로 프로세스들 간의 구분자가 필요 프로세스의 저장 위치(메모리 보호) 필요 프로세스의 PC register 및 상태 register 정보가 필요 이들 프로세스의 정보를 관리하는 PCB(Process Control Block)가 존재한다. process = program + PCB, program = process - PCB Practical Operating Systems
1. 프로세스 관리 커널 프로세스와 사용자 프로세스 운영체제 또한 주 기억 장치에 상주된 프로세스이며 이를 커널 프로세스라 하고, 일반 사용자 프로그램이 실행을 위해 주 기억 장치에 상주되면 PCB가 생성되며 이는 사용자 프로세스가 된다. 커널 프로세스가 사용자 프로세스 보다 우선 순위가 높다. Practical Operating Systems
1. 프로세스 관리 프로세스 상태(process status) 생성(create) : 프로세스가 메모리에 올라와 실행 준비가 완료된 상태(해당 PCB 생성) 준비(ready) : 생성된 여러 개의 프로세스가 cpu의 순서를 기다린다. 실행(execute) : cpu에 의해 준비상태의 프로세스를 일정 시간 동안 실행 대기(blocking) : 실행 상태의 프로세스가 입출력 요구 시 입출력 완료 시까지 기다리는 상태, 입출력이 끝나면 준비상태로 변환 완료(terminated) : 프로세스의 작업 종료(해당 PCB 제거) Practical Operating Systems
1. 프로세스 관리 프로세스 상태( process status) 용어 정리 일시 정지(suspended status, pause status) : 대기상태와 유사하며 프로세스가 일시적으로 작업을 중지한 상태 예, UNIX의 sleep() 함수 sleep(100) 명령 실행 시 100msec 동안 일시 정지 상태가 된다. 용어 정리 CPU scheduler : 준비 상태의 프로세스들 중 실행하기 위해 하나의 프로세서를 선정하는 작업을 담당 Dispatch(디스패치) : 준비 상태에 있는 프로세스를 실행 상태로 옮기는 작업 Context switching(문맥교환) : 한 프로세스에서 다른 프로세스에게로 CPU가 할당되는 과정 Practical Operating Systems
1. 프로세스 관리 간단한 프로세스 상태도 Practical Operating Systems
1. 프로세스 관리 프로세스 상태도 Practical Operating Systems
1. 프로세스 관리 PCB, 프로세스 제어 블록 (Process Control Block) 프로세스가 작동하는데 필요한 중요한 정보를 보관하는 자료구조이며 TCB(Task Control Block)라고도 불린다. PCB는 프로세스 생성 시 만들어지며 모든 프로세스는 고유의 PCB를 가지며, 프로세스 완료 시 해당 PCB가 폐기 된다. PCB의 내용은 프로세스 상태 정보 프로세스 구분자(PID) PC register 내용 : 다음에 실행될 위치의 주소 프로세스 우선순위 레지스터 정보 메모리 관리 정보 : 프로세스가 저장된 메모리 관련 정보 할당된 자원 정보 : 프로세스 실행을 위하여 사용하고 있는 자원의 정보 계정 정보 : 계정 번호, CPU 할당 및 사용 시간 등의 정보 부모, 자식 프로세스 정보 : 상속에 관련된 부모, 자식 프로세스의 정보 Practical Operating Systems
1. 프로세스 관리 입출력 대기 큐(Queue) Practical Operating Systems
1. 프로세스 관리 Context Switching (문맥교환) 프로세스들의 상태를 바꾸는 작업을 지칭한다. Practical Operating Systems
2. 프로세스 연산 Process Creation (프로세스의 생성) 프로세스는 code area(코드 영역) : 프로세스의 본문에 해당 , 읽기전용 영역 예) 요리책 Data area(데이터 영역) : 코드가 실행되면서 사용하는 변수나 파일과 같은 데이터들의 영역. 예) 요리의 재료들 stack area(스택 영역) : 운영체제가 프로세스를 실행시키기 위해 부가적으로 필요한 데이터들을 모아 놓은 영역. 예) 조리 도구들 으로 구성한다. Practical Operating Systems
2. 프로세스 연산 Process Creation (프로세스의 생성) fork() system call : UNIX OS의 프로세스 생성 함수 (복사) 장점 : 자식프로세스의 생성이 빠르다. (보조기억장치를 접근할 필요 없음) 부모 프로세스의 자원을 상속 받는다. (별도 추가 요구 작업 불필요) 부모 프로세스에서 자원에 대한 관리를 효율적으로 처리 Practical Operating Systems
2. 프로세스 연산 Process Creation (프로세스 생성의 예) Practical Operating Systems
2. 프로세스 연산 Process Replacement (프로세스 전환) exec() system call : 현재 실행 중인 프로세스를 새로운 내용으로 바꾸는 시스템 함수 프로세스 구분자(PID, PPID, CPID)만 남겨 두고 프로세스의 나머지 내용을 새로운 것으로 모두 바꿔버린다. Practical Operating Systems
2. 프로세스 연산 Process Replacement (프로세스 전환의 예) 2) 1) 3) 4) 5) 6) Practical Operating Systems
2. 프로세스 연산 Process Hierarchy (프로세스의 계층구조) 운영체제에 있는 모든 프로세스는 root 프로세스의 자식이며 tree 구조이다. 프로세스의 계층 구조는 프로세스간의 책임 관계가 분명해져서 시스템을 관리하기가 수월해 진다. init 프로세스에서 fork()와 exec()를 이용하여 사용자 login 프로세스를 만든다 login 프로세스는 exec()를 이용하여 shell 프로세스로 바꾼 후 사용자의 명령을 기다린다. fork()와 exec() 이용 Practical Operating Systems
2. 프로세스 연산 Process Hierarchy (프로세스의 계층구조) 프로세스가 작업을 마쳤을 경우, 그 프로세스가 사용하던 여러 자원들을 운영체제가 회수하는데 모든 프로세스가 부모-자식 관계로 만들어져 자식 프로세스가 작업을 마쳤을 때 부모 프로세스가 자식이 사용했던 자원을 회수하므로 관리가 수월하다. Garbage collection : 운영체제가 주기적으로 부모가 회수하지 못한 자원을 회수하는 작업을 말함. 현대의 객체지향 프로그램의 기본이 되었다. Practical Operating Systems
3. 스레드(Thread) Thread Concept (스레드 개념) Benefits of Thread (스레드의 장점들) 프로세스의 일부를 공유하는 작은 프로세스를 thread (가벼운 프로세스, LWP) 라 하며, 한 개의 thread만을 가진 일반 프로세스를 무거운 프로세스(HWP)라 한다. cf. CPU 이용의 기본 단위 (바느질의 실), JAVA Benefits of Thread (스레드의 장점들) fork()를 사용하여 프로세스를 복사하면 부모 프로세스와 자식 프로세스가 똑같은 내용을 가지게 되어 중복이 발생된다. 이런 중복을 피하기 위해 공유부분을 제외한 실행과 관련된 부분을 thread로 분리하여 관리함으로써 중복을 피하고 자원의 낭비를 막을 수 있다. 즉, 같은 프로세스로 여러 개의 작업을 동시에 진행하는 경우, 프로세스를 복사하기 보다는 thread를 여러 개 생성하여 사용함으로써 불필요한 작업을 줄일 수 있다. Practical Operating Systems
3. 스레드(Thread) Benefits of Thread (스레드의 장점들) 응답성 향상 : 다중 스레드를 사용하게 되면 사용자의 작업 요구에 대하여 빠른 응답을 해줄 수 있다. 자원의 공유 : 1개의 프로세스 내에 독립된 스레드를 생성하게 되면, 프로세스의 자원을 모든 스레드가 공유하게 되어 작업을 원활하게 진행할 수 있다. 효율성 향상 : 프로세스의 생성과 달리 다중 스레드의 경우 불필요한 자원의 중복을 막을 수 있어 시스템 효율성이 향상된다. 다중 CPU 지원 : 한 개 이상의 CPU를 가진 컴퓨터에서 다중 스레드를 사용하면 다중 CPU가 다중 스레드를 동시에 처리할 수 있어 throughput 향상과 프로세스의 처리시간이 단축된다. Practical Operating Systems
3. 스레드(Thread) Multi Thread Model (다중 스레드 모델) 프로세스는 커널 프로세스 사용자 프로세스 프로세스는 커널 프로세스 사용자 프로세스 로 구분 하듯이 스레드 커널 스레드 : 커널이 직접 생성하고 관리하는 스레드 사용자 스레드 : 라이브러리에 의해 구현된 일반적 스레드 사용자 스레드가 커널 스레드를 사용하기 위해서는 시스템 호출을 통해 커널 기능을 사용해야 한다. Practical Operating Systems
4. Advanced Topics Dual Mode 프로세스는 크게 커널 프로세스와 사용자 프로세스로 나뉘며, 커널 프로세스가 실행되는 상태를 kernel mode(커널 모드), 사용자 프로세스가 실행되는 상태를 user mode(사용자 모드)라 부른다. 운영체제가 위 두 가지의 모드를 전환하여 사용하는 것을 dual mode(이중 모드)라 부르며, 자원을 보호하는 중요한 개념이다. 사용자 프로세스가 자발적으로 커널 모드로 진입할 수 있는 유일한 수단은 시스템 호출뿐이다. Practical Operating Systems
3. 스레드(Thread) 사용자 스레드 대 커널 스레드 모델 다 대 일(many-to-one) 모델 : 커널 스레드가 대기상태이면 사용자 스레드도 대기하게 됨. 병렬성이 없음. 일 대 일(one-to-one)모델 : 독립적으로 작업이 가능하며, 동시에 처리할 수 있는 작업의 양이 증가. 병렬성은 보장되나 사용자 스레드 생성 시 커널 스레드를 생성 오버헤드로 인한 성능 저하 요인, 스레드의 수를 제한함. (windows 계열, Linux) 다 대 다(many-to-many)모델 : 커널 스레드의 수가 사용자 스레드의 수보다 같거나 작은 모델로 커널 스레드가 2개 이상 있어 대기상태가 아닌 커널 스레드가 대신 일을 처리할 수 있어 동시에 처리할 수 있는 작업량이 늘어나지만, 일 대 일 방식보다 동시에 처리할 수 있는 작업량이 같거나 적다. Practical Operating Systems