일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 백준 10000번
- 백준 2261번
- 이분 탐색(Binary Search)
- 분할 정복(Divide and Conquer)
- 알고리즘 개념
- 위상 정렬(Topology Sort)
- 백준 1948번
- 그리디 알고리즘(Greedy Algorithm)
- 큐(Queue)
- 백준 18352번
- 백준 2504번
- BFS
- DFS(Depth First Search)
- DFS & BFS
- 백준 17608번
- 백준 21606번
- 위상 정렬(Topological Sort)
- 이분 그래프(Bipartite Graph)
- 백준 2812번
- 그래프(Graph)
- 다익스트라 알고리즘(Dijkstra Algorithm)
- 백준 1707번
- 트리(Tree)
- 백준 2493번
- BFS(Breadth First Search)
- 백준 9012번
- DFS
- 플로이드 워셜 알고리즘(Floyd-Warshall Algorithm)
- 동적 프로그래밍(Dynamic Programming)
- 스택(Stack)
- Today
- Total
Always Be Wise
프로세스(Process)란? 본문
프로세스(Process)란?
프로세스(Process)는 메인 메모리에 로드되어 실행 중인 특정 프로그램의 인스턴스를 의미합니다.
프로세스는 시스템으로부터 **공간적 자원(메모리 공간)**과 **시간적 자원(CPU 시간)**을 일정량 할당받아서
특정 작업을 수행합니다. 운영체제는 각 프로세스에게 할당된 시스템 자원들을 관리하는 역할을 수행한다.
각 프로세스는 서로 겹치지 않는 독립된 메모리 공간(Code, Data, Heap, Stack 영역)을 할당 받습니다.
가상 메모리 시스템에 의해 하나의 프로세스는 다른 프로세스의 메모리 공간에 접근할 수 없도록 제한됩니다.
다른 프로세스 자원에 접근하려면 IPC(Inter-Process Communication, 프로세스 간 통신)를 이용해야 합니다.
기본적으로 각 프로세스는 하나의 쓰레드를 가지며, 필요한 경우 추가로 쓰레드를 생성할 수 있습니다.
쓰레드(Thread)란?
쓰레드(Thread)는 특정 프로세스 내에 존재하는 각각의 실행 흐름을 의미합니다.
한 프로세스의 쓰레드들은 해당 프로세스가 할당받은 시스템 자원들을 일부 공유합니다.
정확히는 한 프로세스의 쓰레드들은 Stack 영역만 별도로 할당받고 Code, Data, Heap 영역은 공유합니다.
따라서 동일한 프로세스 내에 존재하는 쓰레드들끼리는 동일한 자원에 대하여 읽고 쓰기가 가능합니다.
각 쓰레드는 자신만의 고유한 쓰레드 ID, 프로그램 카운터, 레지스터 집합을 가집니다.
멀티 프로세스와 멀티 쓰레드?
멀티 프로세스란 여러 개의 프로세스를 생성하여 하나의 작업을 처리하는 것을 의미합니다. 설계와 디버깅이
멀티 쓰레딩에 비해 단순합니다. 다른 프로세스의 자원에 애초에 접근이 불가하기 때문에 고려할 동기화 이슈가
많지 않습니다. 여러 프로세스들 중 한 프로세스에 문제가 생기더라도 다른 자식 프로세스들은 영향받지 않습니다.
그러나 문맥 전환(Context Switching)의 오버헤드가 상당히 큽니다. 쓰레드와 달리 프로세스는 메모리 공간을
서로 공유하지 않아 저장 및 복원해야 하는 정보의 양이 굉장히 많기 때문입니다. 각각의 프로세스는 독립된 메모리
공간을 할당받기 때문에 또 다른 프로세스의 자원에 접근하려면 IPC와 같은 복잡한 통신 기법을 거쳐야만 합니다.
멀티 쓰레드란 하나의 프로세스 내에서 여러 개의 쓰레드를 생성하여 하나의 작업을 처리하는 것을 의미합니다.
프로세스에 비해 문맥 전환(Context Switching)의 오버헤드가 작습니다. 이는 저장 및 복원해야 하는 정보의
양이 상대적으로 적기 때문입니다. 프로세스가 한 번 자원을 할당받으면 쓰레드들이 계속해서 이를 공유하며 사용
할 수 있기 때문에 자원 활용의 효율도 높다고 할 수 있습니다. 복잡한 통신 기법 없이 쓰레드 간 데이터 통신이
용이합니다. Stack 영역을 제외한 메모리 공간을 전부 공유하기 때문입니다.
그러나 설계와 디버깅이 멀티 프로세스에 비해 까다롭습니다. 또한, 자원을 공유하기 때문에 동기화 이슈가 발생할
수 있습니다. 하나의 쓰레드에서 문제가 생기면 해당 프로세스 전체가 영향받습니다.
'기술 관련 정리' 카테고리의 다른 글
데드락(Deadlock)이란? (0) | 2022.03.29 |
---|---|
스택(Stack)과 힙(Heap) (0) | 2022.03.29 |
시스템 콜(System Call)이란? (0) | 2022.03.29 |
세마포어(Semaphore)란? (0) | 2022.03.20 |
JPG와 PNG의 차이 (0) | 2022.03.20 |