앞서 작성한 운영체제에 이어서 프로세스에 대해 간단히 이야기합니다.
프로세스
초기 컴퓨터 시스템은 한 번에 하나의 프로그램만을 실행시켰습니다.
반면 오늘날의 컴퓨터 시스템들은 메모리에 다수의 프로그램이 적재되어 병행 실행되는 것을 허용합니다.
프로세스란 실행중인 프로그램을 말합니다. 프로세스가 무엇이고 어떻게 표현되며 어떻게 동작하는지 알아보겠습니다.
프로세스의 특징
- 병렬 실행이 가능합니다.
- 독립된 메모리 영역과 주소 공간을 운영체제로부터 할당받습니다.
프로세스 메모리 배치
- Code 영역, Data 영역, Heap 영역, Stack 영역이 존재합니다.
- Code 영역, Data 영역은 Run time 동안 고정된 크기를 갖습니다. 하지만 Stack 영역과 Heap 영역은 동적으로 크기가 조정되며 서로의 방향으로 확장됩니다.
PCB
- PCB는 프로세스 제어 블록을 의미합니다.
- 프로세스 상태, 프로세스 번호, Program Counter, Register, 메모리 제한, 오픈 파일 리스트를 포함합니다.
- 프로세스 상태는 new, ready, running, waiting, halted가 존재합니다.
- Program Counter는 다음에 실행할 명령어의 주소를 가리킵니다.
Context Switching
- 인터럽트가 발생할 때 현재 진행하고 있는 Task의 상태를 저장하고 다음 진행할 Task의 상태 값을 읽어 적용하는 과정입니다.
- 커널은 앞서 언급한 PCB에 문맥을 저장하고, 새 프로세스의 저장된 context를 복구합니다.
Android Process Hierarchy
- 제한된 시스템 자원을 회수하기 위해 기존 프로세스를 종료해야 할 수도 있습니다.
- 중요도 계층을 식별합니다.
- forground process -> visible process -> service process -> background process -> empty process
IPC
socket
- socket은 통신의 endpoint를 뜻합니다. ip주소와 포트번호를 접합하여 구별합니다.
RPC
- Remote Procedure Calls의 준말입니다. 또한 IPC 기반 위에 만들어집니다.
Anroid RPC
interface RemoteService {
boolean remoteMethod(int x, double y);
}
References
- Abraham Silberschatz, Peter B. Galvin, Greg Gagne의 『Operating System Concept 10th』