티스토리 뷰
프로세스란?
프로그램이 메모리에 올라왔을때 프로세스라고 한다.
프로세스 생성과 종료
*생성
부모프로세스:
다른 프로세스를 생성한 프로세스
자식프로세스:
생성된 프로세스
*종료
부모 프로세스가 종료될 경우 그 프로세스의 모든 후손들을 연쇄적으로 종료시킨 후 종료
- 자발적 종료 : 프로세스가 명령을 모두 수행 후 코드 마지막에 exit() 시스템 콜을 추가해 운영체제에 자신이 종료됨을 알리는 방식
- 비자발적 종료 : 부모 프로세스가 abort() 함수를 통해 자식 프로세스의 수행을 강제로 종료하는 것이다.
부모프로세스와 자식프로세스
- 프로세스와 자식 프로세스는 독립적인 주소 공간을 갖는 경우
- 프로세스와 자식 프로세스는 독립적인 주소 공간을 공유하는 경우(자원을 공유) : Copy On Write Cow기법
* 주소 공간 공유 : 자식 프로세스에게 부모 프로세스와 동일한 논리주소를 부여
* 수정이 발생할 때마다 새로운 메모리 페이지를 할당하고 복사해야 하므로 속도가 느림
* 공유하지 않는 모델 : 독립적인 메모리 공간을 가지며 부모와 자식 프로세슨 서로에게 영향을 미치지 않고 서로 경쟁하는 사이가 됨
* 사용하는곳 : 대용량 읽기 시스템(수정이 거의 없는) 양방향에서 읽기 때문
메모리에 같은 프로세스 2개가 올라간것과 마찬가지이므로 메모리 낭비가 됨.
-> 일부 OS에서는 새로운 프로세스 생성시 복사본을 만드는 대신 부모 프로세스의 주소 공간만 공유하다가 실제로 수정사항이 생기면 (부모 프로세스와 자식 프로세스의 내용이 달라지면) 그때 복사본을 만들어서 자식 프로세스가 갖게됨
멀티프로세스
여러개의 프로세서가 공통된 한일을 동시에 처리
장점
- 독립적인 주소공간과 프로세스 메모리 구분으로 인한 안정성
- 프로세스 하나에 문제가 생겨도 다른프로세스에 영향을 미치지않음
단점
- 독립된 메모리 영역이므로 작업량이 많을수록 잦은 context switching로 인해 오버헤드가 발생
context switching
CPU가 하나의 프로세스나 스레드에서 다른 프로세스나 스레드로 전환하는 과정을 말합니다. 이때, 컨텍스트 스위칭이 일어나는 위치는 운영체제(OS)의 스케줄러이다.
*캐시메모리
캐시메모리는 CPU에서 한번 이상 읽어들인 메인 메모리의 데이터를 저장하고있다가 CPU가 다시 그 메모리에 저장된 데이터 요구시 메인 메모리를 통하지 않고 바로 값을 전달하는 용도
*캐시메모리 위치
CPU와 주기억장치(RAM) 사이에 위치하며, CPU가 자주 참조하는 데이터나 명령어를 저장해 놓고 더 빠르게 접근할 수 있도록 돕는 메모리
*CPU가 메모리를 접근하는 이유
CPU는 메모리에 접근하여 프로그램 실행에 필요한 데이터나 명령어를 가져와야 합니다. CPU가 명령어를 실행하기 위해서는 그 명령어가 저장된 메모리 주소를 알아야 하며, 데이터를 처리하기 위해서도 해당 데이터가 저장된 메모리 주소를 알아야 합니다.
ex.프로그램이 실행되기 위해 필요한 명령어들이 저장된 코드, 변수,스택,힙
*프로세스에서 Context Switching 발생시 오버헤드가 발생하는 이유
프로세스 교체시에 공유하는 메모리가 없기때문에 context switching 발생시 캐쉬에 있는 모든 데이터를 모두 리셋하고 다시 캐쉬정보를 불러와야한다. 쓰레드는 캐쉬 정보를 비울필요가 없어서 속도차이가 발생
컨텍스트 스위칭은 CPU가 실행 중인 프로세스나 스레드를 중지하고, 다른 프로세스나 스레드를 실행하는 과정입니다. 이때, 컨텍스트 스위칭이 일어나면 CPU 내부의 캐시 메모리에 저장된 데이터가 무효화되어야 한다 왜냐하면 CPU 캐시 메모리에 저장된 데이터는 메인 메모리의 일부를 저장하는데, 컨텍스트 스위칭이 일어나면 CPU가 현재 실행 중인 프로세스나 스레드와 관련된 데이터를 다시 메인 메모리에서 가져와야 하기 때문
따라서, 컨텍스트 스위칭이 일어날 때 CPU 내부의 캐시 메모리를 비워야 하므로, 성능 저하가 발생할 수 있습니다. 이를 최소화하기 위해서는 캐시 메모리에 저장된 데이터가 불필요하게 무효화되는 것을 방지하는 방법이 필요합니다.
사용이유
- 안정성과 신뢰성
멀티프로세스는 각각의 프로세스가 독립적으로 실행되기 때문에, 하나의 프로세스가 충돌하거나 중단되더라도 다른 프로세스는 영향을 받지 않음. 이는 시스템의 안정성과 신뢰성을 높여줍니다.
ex. 웹 브라우저: 웹 브라우저는 여러 개의 탭을 동시에 열 수 있다. 각 탭은 각각의 프로세스로 실행된다. 이렇게 하면 하나의 탭에서 충돌이 발생해도 다른 탭에 영향을 미치지 않는다.
-분산 처리
멀티프로세스는 여러 대의 컴퓨터에서 프로세스를 분산 처리할 수 있게해줌. 이는 더 많은 사용자나 데이터 처리를 위해 여러 대의 서버를 사용할 수 있도록 해주며, 서버 간의 부하 분산을 통해 시스템의 안정성과 성능을 향상시킬 수 있다.
- 모듈화의 용이
멀티프로세스는 여러개의 독립적인 프로세스로 구성되기 때문에 각각의 프로세스를 모듈화해서 개발하거나 추가/확장/관리할 수 있다. 이로 인해 개발 및 유지보수를 용이하게 해준다.
ex. IOT
IPC(Inter-Process Communication)
Shared Memory
두 개 이상의 프로세스가 동일한 물리 메모리 공간을 공유하여 데이터를 공유
장점
데이터를 직접 공유하기 때문에, 데이터의 복사나 전송에 따른 오버헤드가 없으며 빠른 속도로 데이터를 교환할 수 있음
단점
공유 메모리는 프로세스 간의 데이터 동기화 문제가 발생할 수 있고, 공유 메모리를 사용하는 경우 데이터에 대한 접근 권한과 보호 문제도 고려
Message passing
송신 프로세스는 수신 프로세스에게 메시지를 전송하기 위해 명시적인 명령을 사용하여 전송합니다. 수신 프로세스는 메시지를 수신하기 위해 대기하고 있으며, 메시지가 도착하면 메시지를 처리
장점
공유 메모리보다 데이터 접근 권한 및 보호 문제가 적으며, 분산 시스템에서 유용하게 사용
* 분산시스템에서 유용하게 사용할 수 있는 이유
- Message Passing을 사용하면 각각의 프로세스는 독립적으로 실행될 수 있으며, 데이터 일관성을 유지할 수 있음
- Message Passing은 데이터를 직접 공유하는 것이 아니기 때문에 분산 시스템에서 안전하게 사용될 수 있음
단점
데이터의 크기나 형식에 따라 오버헤드가 발생
*참고
내가 좋아하는 지수의 머리
https://www.studytonight.com/operating-system/copyonwrite-in-operating-system
https://www.includehelp.com/operating-systems/cache-memory-and-its-different-levels.aspx
https://byjus.com/gate/context-switching-in-os-notes/
https://www.geeksforgeeks.org/inter-process-communication-ipc/
'OS' 카테고리의 다른 글
[OS] DeadLock(데드락) (0) | 2023.03.19 |
---|---|
[OS] Process 동기화 - 싱글코어가 아니라 멀티코어라면, 어떻게 동기화가 이뤄질까요? (3) | 2023.03.14 |
[OS] Process 동기화(세마포어,뮤텍스,모니터) (1) | 2023.03.13 |
[OS] CPU Scheduler (1) | 2023.03.06 |
[OS] 쓰레드와 TCB (0) | 2023.02.28 |