동시에 실행되는 프로세스는 독립적 or 협력적하며 진행할 수 있습니다.
프로세스가 독립적이다라는 것은 무슨 의미인가요?
공유하는 데이터도 없고 프로세스끼리 메시지 주고 받는 것도 없이 자신의 프로세스만 진행하게 되는 것입니다.
프로세스가 협력적이다라는 것은 무슨 의미인가요?
영향을 주거나 영향을 받거나 하는 일이 발생됩니다.
어떤 프로세스가 데이터를 공유하거나 메시지를 주고받을 수 있습니다.
프로세스 협력 모델을 구현하기 위해서는 IPC가 반드시 필요합니다.
IPC가 뭔데요?
Inter Process Communication으로 프로세스끼리 통신하는 것입니다.
프로세스들 간에 데이터 및 정보를 주고 받기 위한 매커니즘입니다.
IPC에는 2가지 모델이 존재하는데 shared memory, message passing이 있습니다.
공유 메모리가 멀까요??
공유 메모리는 두 개 이상의 프로세스들이 주소 공간의 일부를 공유하며, 공유한 메모리 영역에 읽기/쓰기를 통해서 통신합니다.
공유 메모리가 설정되면, 그 이후의 통신은 커널의 관여 없이 진행됩니다.
공유 메모리의 장점은 멀까요??
장점으로는 커널의 관여가 없기 때문에 메모리를 직접 사용하여 IPC 속도가 빠릅니다.
프로그램 레벨에서 통신 기능을 제공하기에 자유로운 통신이 됩니다.
공유 메모리의 단점은 멀까요??
단점으로는 프로그래머가 직접 구현해야 하기에 어려움이 존재합니다.
공유 메모리에 대해 아는 것을 설명해주세요??
공유 메모리 모델에서의 IPC는 해당 프로세스가 CPU를 사용하는 행위입니다. 즉, IPC를 많이 한다고 컨텍스트 스위칭이 많이 일어나지 않습니다.
메모리 영역에 대한 동시적인 접근을 제어하는 방법이 필요합니다.
커널이 동기화를 제공하지 않으며, 부가적인 방법이 필요합니다. 방법으로는 Locking과 세마포어가 있습니다.
생산자 - 소비자 문제가 먼지 아세요??
생산자가 데이터를 생성하며 소비자는 데이터를 가져와 소비하는 과정에서 발생하는 문제입니다.
생산자 - 소비자 문제에 대한 하나의 해결책은 공유 메모리를 사용하는 것이며, 이 때 생산자가 정보를 채워 넣을 수 있고 소비자가 소비할 수 있는 버퍼를 활용해야 합니다.
message passing이 머예요??
메시지 전달은 커널을 경유하여 고정길이 메시지, 가변 길이 메시지를 송/수신자끼리 받으며, 커널에서는 데이터를 버퍼링 해줍니다.(send, receive)
프로세스 간 메모리 공유 없이 가능합니다.
message passing의 장점은 머예요??
복잡한 로직은 운영체제 내에서 움직이며 운영체제가 인터페이스를 젝오해줘 구현하기에 간단하여 편리합니다.
message passing의 단점은 머예요??
커널을 경유해야 함으로, 속도가 느립니다.
message passing에 대해 아는 것을 설명해주세요.
메시지 전달 모델에서의 IPC는 해당 프로세스 입장에서 일종의 입출력으로 볼 수 있습니다.
즉, IPC를 하면 할수록 컨텍스트 스위칭이 많이 일어납니다.
예를 들어, send하고 상대방이 받을 때까지 기다려야 할 수 있으며, 이 때 컨텍스트 스위칭이 일어납니다.
receive하면 상대방이 보낼 때까지 기다릴 수 도 있습니다.
send와 receive와 같은 연산에 대해서는 커널이 동기화를 제공해주며, 프로그램은 동기화에 대한 고려없이 사용이 가능합니다.
message passing 모델의 구현 IPC는 파이프, 메시지 큐, 소켓, 시그널 등이 존재합니다.
파이프가 머예요??
하나의 프로세스가 다른 프로세스로 데이터를 직접 전달하는 방법입니다.
데이터는 한 쪽 방향으로만 이동합니다. 따라서 양 방향 통신을 하기 위해선 2개의 파이프가 피룡합니다.
특징으로는 1 to 1 통신이 가능하며, 보내진 순서대로 받습니다. 용량의 제한이 있기에 파이프가 가득 차면 더 이상 쓸 수 없게 됩니다.
시그널이 머예요??
시그널은 프로세스 아이디를 아는 특정한 프로세스에게 커널을 통해 이벤트를 전달하는 것입니다.
어떤 이벤트인지는 시그널 번호를 통해 알 수 있으며 시그널 번호는 signal.h라는 헤더 파일에 정의되어 있습니다.
송신 측 프로세스가 시그널을 보내는 동작은 수신 측 프로세스의 상태와 무관하게 수행됩니다.
수신 측 프로세스에서 시그널을 처리하는 것은, 수신 측 프로세스가 스케줄링 되어야 가능합니다. 즉 비동기적으로 동작하게 됩니다.
수신 측 프로세스는 시그널에 종류에 따라 어떤 시그널을 무시할 지, 붙잡을 건지 시그널 핸들러를 통해서 처리할 수 있습니다.
시그널은 사용자 레벨의 인터럽트라고 할 수 있으며, 사용자는 사용자 프로세스에서 시그널 핸들러를 설치하고 사용할 수 있습니다.
메시지 큐가 머예요??
메시지 큐는 고정된 크기를 갖는 메시지의 연결 리스트를 이용하여 통신하는 방법입니다.
메시지 단위의 통신이며, 메시지의 형태는 사용자가 정의하여 사용할 수 있으며, 통신하고자 하는 프로세스 간의 약속이 필요합니다.
메시지 큐에는 여러 프로세스가 동시에 접근이 가능하며, 동기화가 필요합니다.
메시지 큐를 사용하기 위해서는 메시지 큐 ID를 알아야 합니다. 일반적으로 프로세스가 메시지 큐 ID를 알기가 어려웁니다.
소켓을 사용하게 되면 포트 번호만 알면되어 사용하기 편리합니다.
소켓이 먼지 아시나요??
소켓은 통신의 엔드포인트라고 생각합니다.
운영체제가 제공하는 포트라는 개념을 여러 프로세스가 사용할 수 있도록 해줍니다.
프로세스는 포트 번호를 이용하여 통신하려는 상대 프로세스의 소켓을 찾아갈 수 있습니다.
포트의 도움으로, 다른 IPC와 달리 프로세스의 위치에 독립적입니다.
소켓은 Local 혹은 Remote로 사용할 수 있습니다. 다른 IPC는 모두 Local에서만 사용 가능합니다.
Local인 경우 포트 번호만으로 상대 프로세스를 식별 가능하며,
Remote인 경우는 IP주소와 포트 번호 조합으로 상대 프로세스를 식별할 수 있습니다.
연결의 방법은 신뢰성 있는 TCP와 신뢰성이 없는 UDP가 존재합니다.
'운영체제' 카테고리의 다른 글
쓰레드(2) (0) | 2021.08.08 |
---|---|
쓰레드(1) (0) | 2021.08.08 |
프로세스의 이해 (0) | 2021.08.06 |
운영체제의 개념과 구조 (0) | 2021.08.06 |
운영체제가 뭔가요? (0) | 2021.08.06 |