23.07.06 최초작성
실행되고 있는 프로그램을 말한다.
각 프로세스는 자신만의 주소공간을 가진다.
Code | Data | Stack | Heap |
---|---|---|---|
실제 프로그램 | 초기화된 변수, 전역 변수 | 실행과 관련된 정보 | 동적 메모리 할당 |
인터럽트, 스케줄러, I/O 이벤트를 통해 다른 상태로 전이한다.
모든 프로세스는 다른 프로세스로부터 생성되며 원본 프로세스를 부모(parent) 생성되는 프로세스를 자식(children) 이라고 한다. 이 관계를 트리로 나타낸다.
pid_t fork(void); // 프로세스를 생성하는 시스템 콜
// 자신과 동일한 자식 프로세스를 생성
// 생성 성공 시 부모에게는 자식의 pid가, 자식에게는 0이 return 되지만 실패 시 부모에게 -1이 return 된다.
pid_t exec(void); // 프로세스를 다른 프로세스로 바꾸는 시스템 콜
// 현재 실행했던 내용이 다 사라짐
// 다양한 variant들이 존재(man 참고)
프로세스가 종료 시 (exit()) 메모리의 자원을 반환하고 "return code" 를 남긴다.
pid_t wait(int *wstatus) // 자식 프로세스가 종료될 경우 그 프로세스의 pid와 return code를 받아오는 함수
waitpid(childpid, &status, 0); // childpid를 가진 프로세스가 종료될 경우 status를 통해 값을 저장
//childpid = -1일 경우 함수 실행 후 가장 먼저 종료된 자식 프로세스의 값을 받아옴
- Zombie Process
- 프로세스가 종료된 상태지만 부모 프로세스가 wait()을 실행하지 않아 종료 상태를 회수하지 않은 상태
- wait()이 호출될 때 까지 실행 결과가 남아있음
- Orphan Process
- 부모 프로세스가 wait()을 실행하지 않고 자식 프로세스보다 먼저 종료되어 자식 프로세스의 종료 상태를 회수하지 못한 상태
- 이를 방지하기 위해 부모 프로세스가 종료되면 자식 프로세스도 종료되도록 설정할 수 있다. 이런 방법을 "Cascading termination" 이라 한다.
- 새롭게 부모 프로세스를 할당할 수 있는데 이런 기법을 "Reparenting" 이라고 한다.
프로세스의 정보를 담고 있는 자료 구조
다른 프로세스와 통신해 작업을 수행하는 기법. 계산 속도, 모듈화, 편의성등의 장점이 있다.
1. shared memory 방식
IPC 환경에서 프로세스에게 특정 이벤트를 알리기 위한 이벤트
동기, 비동기
"Signal Handler" 를 통해 신호 처리
man 7 signal //시그널 확인
2개의 프로세스가 통신할 수 있도록 하는 프로그램
unidirectional : 단방향 통신이 가능한 경우
bidirectional : 양방향 통신이 가능한 경우
full duplex : 동시에 읽기/쓰기가 가능한 파이프 (bidirectional)
half duplex : 읽기/쓰기 동시에 하나만 가능한 파이프 (bidirectional)
부모-자식간의 관계에서 생성할 수 있는 파이프
write-end에서 데이터 쓰기가 가능 & read-end에서 데이터 읽기 가능
#include <sys/types.h>
#include <sys/wait.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#inclue < string.h>
void main(){
int pipefd[2]; //pipefd[0] : 읽기 전용, pipefd[1] : 쓰기 전용
pid_t cpid;
char buf;
if(pipe(pipefd) == -1){ //pipe() : pipe 생성하는 시스템 콜
perror("pipe");
exit(EXIT_FAILURE);
}
}
부모-자식 관계에서 뿐만 아니라 다양한 프로세스 간에 사용할 수 있는 파이프
네트워크를 통해 프로세스끼리 통신하는 방법
CPU가 데이터를 메모리에 저장할 때 바이트 단위로 나눠 저장한다. 연속되는 바이트를 저장하는 순서를 바이트 저장 순서라고 한다.
Little-endian : 낮은 주소에 데이터의 낮은 바이트(LSB)부터 저장