※ 복습을 목적으로 작성된 포스팅입니다.
틀린 내용이 있을 경우 피드백 환영합니다.
출처: 패스트 캠퍼스 '컴퓨터 공학 전공 필수 올인원 패키지 Online.' - 운영체제 과목
프로세스와 스레드를 이해하고 있다는 전제 하에 작성하였습니다.
프로세스(Process)
- 실행 중인 응용 프로그램
- 메모리 구조를 그대로 가지고 있음
- CPU 자원을 할당 받아 프로그램이 실행되고 있는 상태
프로세스 간 커뮤니케이션 가능한가?
- 원칙적으로 불가능함
- 프로세스 간 메모리 영역을 공유하지 않기 때문
- 그 이유는?
서로의 공간을 접근할 수 있다면 프로세스의 데이터/코드가 바뀔 수 있기 때문에 이를 원칙적으로 접근할 수 없게 함
그렇다면 프로세스 간 커뮤니케이션이 필요한가?
- 그렇다.
- 여러 프로세스를 만들어 동시 실행함으로 실행 속도를 높여 성능을 높일 수 있기 때문
- 이때, 프로세스 간 상태 확인 및 데이터 송수신이 필요함 - 예시를 들자면
CPU의 core는 여러 개 존재하며, 각 core에서 동시에 실행한 뒤 최종 작업을 위해 특정 Process에서 모아 결과를 처리해야 함
이때 프로세스 간 통신이 필요함
정리하자면, 프로세스 간 커뮤니케이션(통신)은 각 처리를 병렬로 처리해 통합함으로 생산성을 높이기 위해 필요함
IPC(InterProcess Communication)
- 프로새스 간 통신 방법을 제공함
- 간단하게 생각해보자. 프로세스 간 통신을 통해 1부터 10,000까지의 수를 더해보자.
- fork() 함수로 10개의 프로세스를 만들어, 각 프로세스에서 1천 단위로 더하기를 수행한 다음 각 프로세스의 결과 값을 합하면 더욱 빠른 처리가 가능함
- 즉, 계산을 병렬처리함으로 수행시간을 단축시킨 것이며, 각 프로세스가 더한 값을 수집해야 하기에 프로세스 간 통신이 필요함 - IPC 기법 종류 [ (2)번 부터는 모두 커널 공간을 사용함 ]
(1) file 사용 : 실시간 불가, 시간이 오래 걸림
(2) Message Queue
(3) Shared Memory
(4) Pipe
(5) Signal
(6) Semaphore
(7) Socket
fork() 시스템콜이란?
- fork() 함수로 프로세스 자신을 복사해 새로운 프로세스를 만듦
- 부모 프로세스 : fork( ) 호출
- 자식 프로세스 : fork( ) 호출로 인해 생성된 프로세스
예시. 클라이언트와 서버
- 웹 서버는 요청 발생 시, 그에 맞는 응답을 클라이언트에 제공하는 프로그램
- 새로운 사용자 요청이 올 때마다, fork( ) 함수로 새로운 프로세스를 만들고, 각 사용자 요청에 즉시 대응
- CPU 병렬처리가 가능하다면, 더 빠른 대응이 가능하며
- 각 프로세스 제어 및 상태 정보 교환을 위해 프로세스 간 통신 필요
IPC (1) 파일을 사용한 커뮤니케이션
- 저장매체는 공유가 가능하다는 특징을 살림
- 다른 프로세스에 전달할 내용을 파일에 작성하고, 다른 프로세스는 해당 파일을 읽음
- 허나 CPU에서 저장매체에 접근할 때에를 생각해보면, 굉장히 오랜 시간이 걸림.
이 경우 해당 프로세스를 잠시 중단한 상태에서 다른 프로세스를 처리하고 응답을 받기까지 대기하기 때문임. - 즉, 이는 실시간으로 원하는 프로세스에 데이터 전달이 어려워 수행 시간이 느리다는 큰 단점이 있음
프로세스의 예시 : 리눅스
- CPU Protection rings와 연관됨
- 사용자 모드 : 응용 프로그램이 CPU를 사용할 때 사용
- 커널 모드 : OS가 CPU를 사용할 때 사용 - 1 Process = 4GB
- 0 ~ 3GB : User space => 작성한 프로그램 수행
- 4GB : Kernel space => 운영체제 코드 작동 - 리눅스에서 프로세스 간의 공간은 완전 분리되어 있어 사용자 모드에서 커널 공간 접근이 불가함
- 그렇다면 IPC는 어떻게 가능한가?
- 커널 공간을 공유해 프로세스 간 통신이 가능하도록 함
- 0 ~ 3GB (User space)는 각 프로세스에서 관리
- 4GB(Kernel space)는 메모리 상에서 공유함으로 프로세스 간 통신을 가능하게 함
정리
- 여러 프로세스 동시 실행을 통한 성능 개선
- 복잡한 프로그램을 위해서는 프로세스 간 통신 필요
- 프로세스 간 공간은 완전 분리되어 있음
- 프로세스 간 통신을 위해 특별한 기법 필요
- IPC (InterProcess Communitaion) - 대부분의 IPC 기법은 커널 공간을 활용하며, 이유는 커널 공간은 공유되기 때문임
'Study > Computer Science' 카테고리의 다른 글
[HTTP] URI, 웹 브라우저 요청 흐름 (0) | 2021.05.12 |
---|---|
[HTTP] 인터넷 통신 (0) | 2021.05.10 |
[스케쥴러] 선점형과 비선점형 스케쥴러 (0) | 2021.03.25 |
[운영체제] 프로세스 스케쥴링 (Process Scheduling) (0) | 2021.03.25 |