앞선 글에 이어서 이번 글에서는 Shared Memory와 Message Passing에 관한 간단한 소개 및 Shared Memory 방식에 대한 개념 및 예제를 알아보도록 하겠습니다. ● Shared Memory -> 이는 공유 메모리이며 독립적인 프로세스들 간의 통신을 위해 공유되는 메모리 영역을 사용합니다. -> 장점으로는 시스템 호출을 생성할 때(공유 메모리 생성)에 1번만 사용하기 때문에 매우 빠르며 효율이 좋습니다. -> 단점으로는 모든 프로세스들이 접근 가능하기 때문에 Race Condition의 문제가 발생할 수 있으므로 동기화 과정이 필요합니다. 이는 세마포어를 이용하여 해결할 수 있습니다. ● Message Passing -> 같이 쓴다의 개념이아닌 그때 그때 필요한 소스를 프로세스들..
이번 포스팅은 System V IPC 기법들에 대하여 알아보도록 하겠습니다. System V에서는 메시지 큐, 공유 메모리 기법을 통해 프로세스 간 통신을 진행 할 수 있습니다. 독립적인 프로세스들이 서로 통신을 함에 있어 Critical section(중요한 데이터 영역)에 동시에 진입할 경우 Race Condition(충돌)이 발생 할 수 있습니다. 이를 막기위해 독립적인 프로세스들은 동기화 과정이 필요한데 세마포어가 해결을 도와줄 수 있습니다. -> 세마포어는 단순히 메모리 영역에 접근할 수 있는 프로세스들을 알려주는 역할이며 이는 통신기법이 아닌 동기화기법에 해당합니다. 또한 이번 챕터에서 다룰 통신기법들은 각각 공통된 키 생성 -> 키를 통한 식별자 생성 과정을 거친 후 제공되는 함수들을 사용하..
이번 포스팅은 파이프에 대하여 알아보도록 하겠습니다. ● 이름 없는 파이프(PIPEs) -> 파이프는 두 프로세스 간에 통신을 할 수 있도록 인터페이스를 제공합니다. (부모-자식 프로세스 간 통신) -> 파이프는 기본적으로는 단방향이지만 두 개의 파이프를 이용하여 양방향도 가능은 합니다. -> 파이프도 일종의 파일이기 때문에 읽고 쓸 수 있는 파일 기술자가 필요합니다. (부모-자식 간에는 파일 기술자를 공유하고 있기 때문에 통신이 가능한거죠) 파이프와 관련하여 제공되는 함수 - 파이프 만들기 : popen(), pipe() - 파이프 닫기 : pclose() 파이프 생성함수를 통해 파이프를 만들게 되면 fd[0](read전용), fd[1](write전용) 파일 기술자가 생성되고 단방향 통신 특성상 부모-..
이번 포스팅은 8장 시그널에 대하여 알아보도록 하겠습니다. ● 시그널(Signal) - 시그널은 소프트웨어 인터럽트이다. - 시그널은 비동기적으로 프로세스에 신호를 보낸다. 시그널은 다음과 같은 세 가지 경우에 발생한다. 1. 0으로 나누기처럼 프로그램에서 예외적인 상황이 일어나는 경우 2. 프로세스가 kill() 함수와 같이 시그널을 보낼 수 있는 함수를 사용해 다른 프로세스에 시그널을 보내는 경우 3. 사용자가 ctrl+c 같은 인터럽트 키를 입력한 경우 ● 시그널 보내는 함수 - kill(pid, sig) : 시그널을 임의로 보내기 위해서는 kill함수를 사용한다. 매개변수로 시그널을 보낼 프로세스의 pid, 보낼 시그널 번호를 지정한다. pid가 0보다 큰 수 : pid로 지정한 프로세스에 시그널..