Just do IT
반응형
article thumbnail
Chapter 06 시그널

시그널과 IPC * 본래 다른 용도이지만, IPC로도 사용가능한 기법 - 시그널 (signal) - 프로세스에 이벤트 전달 - 소켓 (socket) - 네트워크 시그널(signal) * 유직스에서 30년 이상 사용된 전통적인 기법 * 커널 또는 프로세스에서 다른 프로세스에 어떤 이벤트가 발생되었지를 알려주는 기법 * Ctrl + C 를 눌러서 프로세스 종료시킬 수 있다. 주요 시그널 * 시그널 종류와 각 시그널에 따른 기본 동작이 미리 정해져 있음 - SIGKILL: 프로세스를 죽여라(슈퍼관리자가 사용하는 시그널로, 프로세스는 어떤 경우든 죽도록 되 어 있음) - SIGALARM: 알람을 발생한다 - SIGSTP: 프로세스를 멈춰라(Ctrl + z) - SIGCONT: 멈춰진 프로세스를 실행해라 - SI..

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 프로세스는 운영체제가 생성..

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

시스템 프로그래밍의 기반 요소 * 시스템 콜 (system call) * C 라이브러리 * C 컴파일러 시스템 콜 * 시스템 콜 : 운영체제 리소스나 서비스 요청을 위해, 사용자 영역에서 커널 영역으로 들어가는 함수 * 주요 시스템콜 : read(), write(), open() 등 * 리눅스 / 유직스는 C 언어로 만들어져있으므로, 시스템콜도 C언어로 구현되어 있다 시스템 콜은 어떻게 구현? * eax 레지스터에 시스템 콜 번호를 넣는다 * ebx 레지스터에는 시스템 콜에 해당하는 인자값을 넣는다 * 소프트웨어 인터럽트 명령을 호출하면서 0x80값을 넘겨준다 1. CPU는 사용자 모드를 커널 모드로 바꿔준다 2. IDT (Interrupt Descrpitor Table)에서 0x80에 해당하는 주소(함..

반응형