본문 바로가기

CS

(71)
12. 유닉스 IPC - message queue, semaphore Message Queue 메시지 큐는 파이프하고 비슷한 건데, 파이프처럼 데이터를 주고받을 수 있음 다른 프로세스로 메시지를 send 하거나 다른 프로세스로부터 메시지를 receive 하도록 허용해주는 ipc라 하는 거임 파이프는 bytestream으로 데이터를 주고 받음 데이터의 경계가 없음 메시지와 메시지 간 경계가 없음 메시지 큐로 데이터를 주고받을 때에는 단위가 메시지라는 단위로 주고받아서 메시지간 분명한 경계가 있음 그리고 그것을 메시지들을 구분해서 커널에서 저장할 때, 그걸 링크드 리스트 형태로 커널에서 저장함 struct msqid_ds {/* */ struct ipc_perm msg_perm; /* see ch08_ipc1-p.29 */ struct msg*msg_first; /* ptr ..
11. 유닉스 IPC - IO multiplexing I/O multiplexing fifo 사용할때는 fifo 하나를 두고 서버 rcv 있고 send 가 여러개 있음 fifo를 보내면 여러개 프로세스 간에 interleaving은 안됨. pipe 에서는 안됨, 그래서 하나가 보내면 순서 관계는 잘 맞춰짐 그래서 동시에 보내더라도 먼저 도착하는게 순서대로 들어옴 그럼 receive는 하나씩 가져오면 됨. 근데 문제는 통신 채널이 하나임. 이 통신채널이 client가 여러개 있고 receive 할때 서버가 채널이 각각 데이터를 통신하는 채널이 각각 다른 여러개가 있을때 이걸 어떻게 manage하느냐 이거임. 이게 돌다가 하나가 비어있어서 block 되면 다른 쪽을 보지를 못함 이런 문제가 있어서 이런 경우 어떻게 처리하느냐가 io multiplexing 임 ..
10. 유닉스 IPC - PIPE, FIFO PIPE 프로그램을 작성하는데, 그 프로그램이 한 가지만 잘하는 프로그램을 짜자는 거 한 가지만 잘하는 프로그램을 여러개 만들어서 묶어서 함께 일할 수 있게 하자는 거 그게 가능하려면 프로세스간 커뮤니케이션이 되어야 함 IPC IPC의 대표적인 방법이 파이프 시그널을 통해서도 커뮤니케이션할 수 있는데, 데이터도 주고받고 하기 힘듦 PIPE로 데이터를 주고 받을 수 있는 텍스트 데이터 스트림 채널을 제공함 파이프는 제일 오래된 유닉스의 IPC form이고 가장 간단함 파이프도 file로 간주됨, special file로 표현됨 open하지는 않고 read write를 함 who는 시스템 내에 어떤 유저가 있는지, 유저네임을 출력하는 프로그램임 그 출력을 temp 파일에 write함 wc는 word coun..
9. 유닉스 시그널 프로세싱 - 2 The sigaction(2) system call #include int sigaction(int signo, const struct sigaction *restrict act, struct sigaction *restrict oact); // returns : 0 if ok, -1 on error sigaction argument에는 signo, act, oact가 있음 act는 action을 어떻게 modify할지, oact는 오래된 버전 struct sigaction 구조체 멤버에는 네 개가 있음 struct sigaction{ void (*sa_handler) (int); sigset_t sa_mask; int sa_flags; void(*sa_sigaction) (int, siginfo_t *..
8. 유닉스 시그널 프로세싱 - 1 시그널은 소프트웨어 인터럽트임, 다른 프로세스에게 시그널을 보낼 수 있음 시그널을 받으면 그에 대한 액션을 하게 됨 대부분의 non trivial process는 시그널을 처리할 필요가 있음 비동기적 사건을 처리할 수 있는 방법을 시그널이 제시해줌 시그널 개념 $ cc verybigprog.c 아주 큰 프로그램이라서 오랫동안 돌리는 동안 에러가 많이 뜰 건데, 에러가 뜨면 계속 돌릴 필요 없음. foreground로 돌려서 중지시키기 위해서 ^C를 하거나 인터럽트 키를 누르면 됨 에러를 고쳐서 다시 돌리면 되고, 여기서 시그널이 발생함 ^C를 하면 커널이 응답을 해서 foreground에서 도는 모든 프로그램에게 SIGINT를 보냄 커널 프로세스가 foreground에 SIGINT를 보냈을 때 cc가 돌..
7. 유닉스의 프로세스 - 2 프로세스의 종료 프로세스의 종료는 두가지가 있음 하나는 normal 하나는 abnormal 임 정상 종료는 메인 프로그램에서 return 해서 종료하는 경우, main 아니더라도 exit으로 종료하는 경우 (_exit은 exit이랑 조금 다름) 비정상 종료는 세가지가 있음 abort 시스템콜을 사용하는 경우(core dump해서 종료, 디버깅하는 데 사용), 시그널을 받아서 종료하는 경우, 그리고 스레드에 관련된 것(스레드는 생략) The exit(3) system call #include void exit(int status); void _Exit(int status); #include void _exit(int status); exit의 status는 종료되는 상태를 저장하는 변수임 시스템에서 자동으..
6. 유닉스의 프로세스 - 1 유닉스 프로그램은 실행파일을 만들면 유닉스 차원에서 부가되는 프로그램의 레이아웃이 있음 프로세스에 대해 설명하기 전에, 프로그램 실행 시 어떻게 main이 수행되는지 살펴보자 main 함수로 command line arguments 들과 환경변수들이 어떻게 넘어가고, 메모리 레이아웃이 어떻게 구성되는지 살펴보자 커널은 main함수를 호출하기 전에 특별한 start-up routine을 호출한다, 실행프로그램들은 이 start-up routine을 프로그램의 starting address로 명시한다 start-up routine은 커널로부터 command line arguments, environment 값들을 취한다. main Function 유닉스는 기본적으로 C언어를 이용함 int main(int a..
운영체제 기술면접 준비 운영체제 기술면접 준비 - 운영체제 : 하드웨어를 관리하고, 응용 프로그램과 하드웨어 사이에서 인터페이스 역할, 시스템 동작을 제어하는 시스템 소프트웨어 - 프로세스 관리 : 프로세스, 스레드, 스케줄링, 동기하, IPC 통신 - 메모리 관리 : 가상메모리, 파일 시스템 - 네트워킹 : TCP/IP, 기타 프로토콜 - 사용자 관리 : 접근권한 관리, 계정 관리 - IO 관리 - 파일 관리 - 프로세스 : 프로그램을 메모리 상에서 실행중인 작업 스레드 : 프로세스 안에서 실행되는 여러 흐름 단위 프로세스 주소공간 : code(코드 구성하는 메모리 영역), data(전역변수, 정적변수), heap(동적할당), stack(지역변수, 매개변수, 리턴값, 임시메모리 영역) 스레드는 stack 만 따로 할당 받고 ..