Just do IT
article thumbnail
Chapter 05 프로세스간 커뮤니케이션

다양한 IPC 기법 * IPC : Inter Process Communication 1. file 사용 2. Message Queue 3. Shared Memory 4. Pipe 5. Signal 6. Semaphore 7. Socket 파이프 (pipe) * 기본 파이프는 단방향 통신 * fork()로 자식 프로세스 만들었을 때, 부모와 자식간의 통신 메시지 큐(message queue) * 큐니까 기본은 FIFO(First In First Out) 정책으로 데이터 전송한다 참고 : ftok() * ftok() : 키 생성을 위한 함수 - path 경로명의 inode 값과 숫자값(id)를 기반으로 키 생성 - 경로 삭제 후 재생성시 inode 값이 달라지므로, 이전과는 다른 키값이 리턴 파이프와 메시지..

article thumbnail
Chapter 04 시스템 프로그래밍 (4)

※ 참고 - 프로세스 스케줄링 우선순위 기반 스케줄러 * Priority-Based 스케줄러 - 정적 우선순위 : 프로세스마다 우선순위를 미리 지정 - 동적 우선순위 : 스케쥴러가 상황에 따라 우선순위를 동적으로 변경 우선순위 변경하기 - nice() * 프로세스 중 사실상 root가 소유한 프로세스만, 우선순위를 높일 수 있다 - 다른 프로세스는 우선순위를 낮출 수만 있다 - 스케쥴링 방식에 따라 우선순위가 적용될 수 있고, 안될 수도 있다 우선순위 변경하기 - getpriority(), setpriority() * which : 프로세스(PRIO_PROCESS), 프로세스 그룹(PRIO_PRGP), 사용자(PRIO_USER)별로 우선순위를 가져올 수 있다 예제 - priority.c (root 소유로..

article thumbnail
Chapter 04 시스템 프로그래밍 (3)

프로세스 기본 구조 * TEXT, DATA, BSS, HEAP, STACK 프로세스 생성 * 기본 프로세스 생성 과정 - TEXT, DATA, BSS, HEAP, STACK의 공간을 생성 - 프로세스 이미지를 해당 공간에 업로드하고, 실행 시작 * 프로세스 계층 : 다른 프로세스는 또 다른 프로세스로부터 생성 - 부모 프로세스, 자식 프로세스 fork()와 exec() 시스템콜 * fork() 시스템콜 - 새로운 프로세스 공간을 별도로 만들고, fork() 시스템콜을 호출한 프로세스 (부모 프로세스) 공간을 모두 복사 - 별도의 프로세스 공간을 만들고 부모 프로세스 공간의 데이터를 그대로 복사한다 * exec() 시스템콜 - exec() 시스템콜을 호출한 현재 프로세스 공간의 TEXT, DATA, BSS..

article thumbnail
Chapter 04 시스템 프로그래밍 (2)

프로그램, 프로세스, 스레드 * 프로그램 : 바이너리, 코드 이미지, 응용 프로그램, Application, 또는 실행 파일 * 프로세스 : 실행 중인 프로그램 (메모리 적재 + 프로세스 상태 정보 포함) * 스레드 - 리눅스 프로세스는 기본 스레드 포함 - 싱글스레드 프로세스 : 기본 프로세스 - 멀티스레드 프로세스 : 여러 스레드 존재 프로세스 ID * pid(process id), 각 프로세스는 해당 시점에 unique한 pid를 가짐 * pid 최대 값은 32768 * 부호형(signed) 16비트 정수값 사용 * 최근 할당된 pid가 200이라면, 그 이후는 201, 202… 식으로 할당된다 프로세스 계층 * 최초 프로세스 : init 프로세스, pid 1 * init 프로세스는 운영체제가 생성..