[5월 12일 3교시] 시험 문제 1. OS 영역이 아닌것은? FILE 2. stat, fstat, lstat으로 얻을 수 있는 정보? 3. 하드링크 계수? 4. 터미널 버퍼링? 5. gcc로 libm.a 정적라이브러리를 링크할 때 옵션 2가지? 6. gdb를 사용하여 디버깅 하려면 gcc옵션? 7. make의 용도? 8. fork 후 상속되는 정보가 아닌 것은? 1) 그룹 ID 2) 프로세스 ID 3) 자원 제약 4) file descript.. 컴퓨터 공부/Advanced UNIX System Programming 2009.05.12
[5월 12일 2교시] 시스템V IPC - 공유메모리, 쓰레드 공유메모리 프로세스 간에 공유 메모리를 설정하여 커널 버퍼 경유를 없앰. 동기화 방법 필요(메모리를 계속 읽을 경우 CPU 오버헤드가 심함) #include<sys/types.h> #include<sys/ipc.h> #include<sys/shm.h> int shmget(key_t key, int size, int shmflag); key값과 관련된 공유 메모리 세그먼트(size만큼)의 식별자를 리턴한다. s.. 컴퓨터 공부/Advanced UNIX System Programming 2009.05.12
[5월 12일 1교시] 시스템V IPC - 세마포어 Semaphore 자원을 기록하는 세마포어 변수. P(wait)와 V(signal)연산으로 동기화 P연산 : if(sem>0) sem = sem-1 else{ sem>0이 될때까지 기다림. sem = sem-1 } V연산 : sem = sem+1 기다리는 프로세스를 깨운다. #include<sys/types.h> #include<sys/ipc.h> #include<sys/sem.h> int semget(in:key_t key, in.. 컴퓨터 공부/Advanced UNIX System Programming 2009.05.12
[5월 11일 2교시] 시스템V IPC - 메세지큐 스트림 : 연속된 바이트들의 흐름(바이트 단위) 메세지 : 레코드 단위의 데이터 전송(format 존재) 시스템 V IPC - 메세지 큐 - 세마포어(동기화) - 공유메모리 인터페이스를 위한 별도의 함수 존재 동일한 namespace(input용)로 key를 이용, 식별자는 ID로 한다. Key(키) #include<sys/types.h> #include<sys/ipc.h> key.. 컴퓨터 공부/Advanced UNIX System Programming 2009.05.11
[5월 11일 1교시] FIFO FIFO(named pipe) FIFO파일(named)을 읽고 씀으로써 파이프 통신을 한다. #include<stdio.h> int mknod(char *pathname, mode_t mode , dev_t dev); 특수한 파일을 만든다. pathname - 경로, mode - 파일 권한 + 파일의 형태, dev - 디바이스 번호 int mkfifo(char *pathname, mode_t mode); FIFO파일을 만든다. wrapper함수로 내부적으로 mknod(pathname, S_I.. 컴퓨터 공부/Advanced UNIX System Programming 2009.05.11
[5월 8일 3교시] IPC IPC(프로세스간 통신) unnamed pipe 커널 메모리를 통해 파이프 통신을 함. int pipe(int *filedes); filedes[0] : 읽기 인덱스. filedes[1] : 쓰기 인덱스. 파이프 지원 라이브러리 #include<stdio.h> FILE *popen(char *command, char *type); command : 생성할 자식을 위한 shell 명령 type "r" : 자식 프로세스로부터 FILE*을 통해 데이터를 .. 컴퓨터 공부/Advanced UNIX System Programming 2009.05.08
[5월 8일 2교시] 입출력 비동기 입출력 입출력 가능시 시그널 발생 - BSD계열 : SIGIO, SIGURG - SysV계열 : SIGPOLL static void signal_io(int signo) { .... if ((n = read(fd, buf, sizeof(buf))) < 0) err_sys(“read error”); /* 입력 데이터 처리 */ } int main(void) { .... if (signal(SIGIO, signal_io) < 0) /* 시그널 핸들러 설정 */ err_sys(“signal error”); if (fcntl(fd, F_SE.. 컴퓨터 공부/Advanced UNIX System Programming 2009.05.08
[5월 8일 1교시] 입출력 다중화 1 다수의 blocking file descriptor를 번갈아가며 처리 불가. 해결책 - 모든 디스크립터를 nonblocking으로 설정한 뒤 전부 검사(polling) - 비동기 입출력을 선택적으로 결합 - 입출력 다중화 함수를 사용 - select, poll함수 select함수 #include<sys/types.h> #include<sys/time.h> #include<unistd.h> int select(__in int maxfdp1,__inou.. 컴퓨터 공부/Advanced UNIX System Programming 2009.05.08
[5월 7일 3교시] 시그널 2 #include<unistd.h> unsigned int alarm(unsigned int seconds); 지정된 시간 후 SIGALRM 시그널이 발생하도록 타이머 설정. alarm을 호출하면 이전 남은 시간값 리턴 후 다시 알람 설정. int pause(); 시그널이 전달될 때까지 프로세스의 실행을 지연. 시그널 세트 복수개의 시그널을 표현하는 데이터 형 sigset_t형 변수 시그널.. 컴퓨터 공부/Advanced UNIX System Programming 2009.05.07
[5월 7일 2교시] 시그널 1 시그널 프로세스들 사이의 비동기적 사건의 발생을 전달. 종류 SIGKILL : 핸들러 못바꿈. 프로세스를 강제로 종료. SIGSTOP : 핸들러 못바꿈. 프로세스를 SIGCONT가 올때까지 멈춤. SIGHUP : 터미널 단절, 데몬 프로세스 재수행. SIGABRT : abort함수의 호출. SIGALRM : 설정된 타이머에 의해 발생. SIGCHLD : 프로세.. 컴퓨터 공부/Advanced UNIX System Programming 2009.05.07