목록운영체제 (7)
코가손의 블로그
소켓(Socket) 네트워크상 존재하는 컴퓨터 2대의 컴퓨터 A, B의 존재를 특정해야 하는 상황을 생각해보자. 컴퓨터는 IP주소를 통해 특정한다. 그리고 Port로 컴퓨터 A, B를 잇는 파이프를 특정한다. 컴퓨터 A와 B의 통신을 위해 파이프 형태의 연결을 생성한다. 일종의 Pipe이며 IP주소와 Port로 바인딩 된 것을 소켓이라고 한다. RPCs(Remote Procedure Calls) A컴퓨터는 32비트 빅-엔디안 방식으로 "Hello B"를 보내고 B컴퓨터는 64비트 리틀-엔디안 방식이라고 가정한다면 통신이 이루어지기 전에 이 규격의 호환성을 맞추는 작업을 해야 할 것이다. 이것을 위해 등장한 개념이 RPC이다. RPC는 네트워크 상의 다른 PC의 프로시저를 추상화한다. 쉽게말하자면 클라이언..
파이프(Pipe)는 두 프로세스간 통신할 수 있는 통로라고 생각하면 된다. 파이프는 기본적으로 단방향 통신이며 생산자(Producer)는 파이프의 종단에 쓰고 소비자(Consumer)는 다른 종단 에서 읽는다. UNIX 시스템에서는 일반적으로 pipe(int fd[]) 함수를 사용하여 구축한다. fd[0]은 읽기, fd[1]는 쓰기 종단으로 동작한다. 파이프를 생성한 후, read()와 write()시스템 콜을 사용하여 파이프에 접근할 수 있다. 일반적인 파이프는 파이프를 생성한 프로세스 이외에는 접근할 수 없기 때문에 부모 프로세스가 파이프를 생성하고 fork()를 통해 자식프로세스와 통신하는 방식으로 사용된다. Windows시스템의 일반 파이프는 익명 파이프라고 불리며 UNIX의 일반 파이프와 유사하..
프로세스가 independent 하다 - 프로세스 끼리 공유하는 데이터 없음 - 프로세스 끼리 메시지 주고받지 않음 프로세스가 cooperating 하다 - 프로세스가 서로 영향을 준다 - 데이터를 공유 한다 "프로세스간 통신 문제 어떻게 해결?" -> IPC(Inter-Process Communication) IPC IPC는 한 컴퓨터 내부에서 2개의 프로세스가 통신하는 것을 말한다. cooperating 프로세스들은 IPC메커니즘이 필요하다. IPC메커니즘은 프로세스 끼리 데이터를 주고 받는 과정이다. IPC모델은 2가지 방법이 있다. 공유 메모리(shared memory) 프로세스 간에 공유가 되도록 설정해놓은 메모리, 모든 프로세스가 접근이 가능하다. 공유 메모리는 처음 생성할 때만 시스템 호출을..
리눅스에서는 fork()로 새로운 프로세스를 생성한다. #include #include #include int main() { pid_t pid; pid = fork(); if (pid > 0) wait(NULL); printf("Hello, Process! %d\n", pid); } if (pid > 0) 부모 프로세스 P0, 자식프로세스 P1 P0은 pid > 0을 만족 wait가 되어 wait queue에 들어간다. 그러므로 P1이 CPU를 점유할 수 있게 된다. P1은 pid가 0이기 때문에 밑의 printf문장을 실행하게 된다. P1은 "Hello, Process! 0"를 출력하고 리턴한다. P1의 메인함수가 return 되면 P0에 자식프로세스(P1)가 끝났다는 인터럽트가 발생 그럼 Wait하..