-
[운영체제] 프로세스와 스레드운영체제 2021. 8. 26. 21:20728x90
프로그램
컴퓨터에서 실행할 수 있는 파일 (.exe 등)
파일이 저장 장치에 저장되어 있지만 메모리에는 올라가 있지 않은 정적인 상태
프로세스
실행 중인 프로그램(program) 즉, 사용자가 작성한 프로그램이 OS에 의해 메모리 공간을 할당받아 실행 중인 것
- 프로세스는 각각 독립된 메모리 영역(Code, Data, Stack, Heap의 구조)을 할당받는다.
- Code : 프로세스가 실행할 코드와 매크로 상수가 기계어의 형태로 저장
- Data : 전역변수 또는 static 변수 등등이 저장 (프로그램이 구동되는 동안 항상 접근 가능한 변수가 저장)
- Stack : 함수 안에서 선언된 지역변수, 매개변수, 리턴값, 돌아올 주소 등등이 저장되고 함수 호출시 기록하고 종료되면 제거
- Heap : 런타임에 크기가 결정되는 메모리 영역, 사용자에 의해 메모리 공간이 동적으로 할당되고 해제
- 각 프로세스는 별도의 주소 공간에서 실행되며, 한 프로세스는 다른 프로세스의 변수나 자료구조에 접근할 수 없다 → 프로세스 간의 통신(IPC, inter-process communication)을 사용해야 한다.
프로세서
프로세스가 동작될 수 있도록 하는 하드웨어 (CPU)
* 동작 : 프로그램의 자원들이 메모리에 올라오고, 실행되어야 할 코드의 메모리 주소를 CPU의 레지스터로 올리는것.
멀티태스킹/멀티프로세스
하나의 운영체제 안에서 여러 프로세스가 실행 되는 것.
여러 프로세스가 동시에 실행되는 것처럼 보이지만 그렇지 않다. CPU는 한순간에 하나의 프로세스만 실행할 수 있음
운영체제가 짧은 시간에 수십번에서 수천번 실행할 프로세스를 교체하고 있기 때문에 동시에 실행되는 것처럼 느껴짐
장점
- 여러 개의 자식 프로세스 중 하나에 문제가 발생하면 그 자식 프로세스만 죽는 것 이상으로 다른 영향이 확산되지 않는다
단점
- Context Switching 의 오버헤드
- 프로세스 간의 Context Switching시 단순히 CPU 레지스터 교체 뿐만 아니라 RAM과 CPU 사이의 캐쉬 메모리에 대한 데이터까지 초기화되므로 오버헤드가 크다
- Context Switching : CPU가 여러 프로세스를 돌아가며 작업하기 위해, 동작 중인 프로세스가 대기를 하면서 해당 프로세스의 상태(Context)를 보관하고, 대기하고 있던 다음 순서의 프로세스가 동작하면서 이전에 보관했던 프로세스의 상태를 복구하는 작업
- 다른 프로세스 정보를 이용하기 위해서 IPC 통신 필요
스레드
한 프로세스 내에서 실행되는 여러 흐름의 단위
- 스레드는 프로세스 내에서 각각 Stack만 따로 할당받고 Code, Data, Heap 영역은 공유한다.
멀티스레드
프로세스가 여러 작업을 여러 스레드를 사용하여 동시에 처리하는 것
장점
- Context-Switching할 때 공유하고 있는 메모리만큼의 메모리 자원을 아낄 수 있다.
- 스레드는 프로세스 내의 Stack 영역을 제외한 모든 메모리를 공유하기 때문에 통신의 부담이 적어서 응답 시간이 빠르다.
단점
- 스레드 하나가 프로세스 내 자원을 망쳐버린다면 모든 프로세스가 종료될 수 있다.
- 자원을 공유하기 때문에 필연적으로 동기화 문제가 발생할 수밖에 없다.
- 스레드의 스케줄링은 운영체제가 처리하지 않기 때문에 프로그래머가 직접 동기화 문제에 대응해야하고 디버깅이 어렵다
참고
- https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html
- https://selfish-developer.com/entry/%EC%8A%A4%ED%83%9D-%ED%9E%99-%EC%BD%94%EB%93%9C-%EB%8D%B0%EC%9D%B4%ED%84%B0%EC%98%81%EC%97%AD
- https://velog.io/@raejoonee/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%99%80-%EC%8A%A4%EB%A0%88%EB%93%9C%EC%9D%98-%EC%B0%A8%EC%9D%B4
728x90'운영체제' 카테고리의 다른 글
[운영체제] CPU 스케줄링 (0) 2021.08.27 - 프로세스는 각각 독립된 메모리 영역(Code, Data, Stack, Heap의 구조)을 할당받는다.