운영체제 (operating system)
사용자에게 편의성 제공을 목적으로 컴퓨터 하드웨어를 관리하는 시스템 소프트웨어이다. 사용자는 응용 프로그램을 이용해 다양한 작업을 하는 것이 목적이고, 운영체제는 응용 프로그램이 하드웨어에게 일을 시킬 수 있도록 돕는다. 즉, 운영체제는 하드웨어의 시스템 자원을 관리하는 주체이다.
응용 프로그램
운영체제를 통해 컴퓨터에게 일을 시키는 것
응용 프로그램은 컴퓨터를 조작할 수 있는 권한을 처음부터 가지고 있는게 아니기 때문에 응용 프로그램이 컴퓨터에게 일을 시키기 위해서는 운영체제를 통해 컴퓨터를 조작할 수 있는 권한을 부여 받아야 한다. 따라서, 운영체제는 응용 프로그램과 소통하기 위해 인터페이스(API)를 제공한다. 응용 프로그램이 시스템 자원을 사용할 수 있도록 운영체제에서 다양한 함수를 제공하는 것을 시스템 콜(System call)이라고 한다
시분할 처리 시스템(time sharing sysyem)
사용자에게 짧은 간격으로 프로세서를 할당하여 마치 한 사용자가 프로세서를 독점한 듯 착각하게 해 여러 사용자가 단일 시스템을 동시에 사용할 수 있다. 하나의 중앙 컴퓨터를 두 개 이상의 단말장치에서 동시에 공동 이용. 프로세스의 사용 시간을 작게 나누어 다중 사용자나 여러 작업을 한 대의 컴퓨터에서 할 수 있다.
프로세스(Process)
- 실행 중인 하나의 프로그램
- 운영체제로부터 시스템 자원을 할당 받는 작업의 단위
할당 받는 시스템 자원
- CPU 시간
- 주소 공간
- Code, Data, Stack, Heap의 구조로 되어있는 독립된 메모리 영역
특징
- 프로세스는 각각 독립된 메모리 영역(Code, Data, Stack, Heap의 구조)을 할당받는다.
- 프로세스는 최소 1개 이상의 스레드(메인 스레드)를 가지고 있다.
- 각 프로세스는 별도의 주소 공간에서 실행되며, 기본적으로는 한 프로세스는 다른 프로세스의 자원에 접근할 수 없다.
- 한 프로세스가 다른 프로세스의 자원에 접근하려면 프로세스 간의 통신(IPC, inter-process communication)을 사용해야 한다.
스레드(Thread)
- 프로세스 내에서 실행되는 여러 흐름의 단위
- 프로세스가 할당 받은 자원을 이용하는 실행의 단위
- 코드가 실행되는 하나의 흐름, 한 프로세스 내에 스레드가 두 개면 코드가 실행되는 흐름이 두 개 생긴다는 뜻이다.
특징
- 스레드는 프로세스 내에서 각각 Stack만 따로 할당받고, Code, Data, Heap 영역은 공유한다.
- 각각의 스레드는 별도의 레지스터와 스택을 갖고 있지만, 힙 메모리는 서로 읽고 쓸 수 있다.
- 한 스레드가 프로세스 자원을 변경하면, 다른 이웃 스레드도 그 변경 결과를 즉시 확인할 수 있다.
- 스레드는 다른 스레드와 독립적으로 동작한다.
Code, Data, Stack, Heap 영역
멀티 태스킹
멀티 태스킹은 두 가지 이상의 작업을 동시에 처리하는 것을 의미한다. 운영체제는 멀티 태스킹을 할 수 있도록, 프로세스마다 CPU 및 메모리 자원을 적절히 할당해 실행한다.
- 멀티 프로세싱는 애플리케이션 단위의 멀티 태스킹
- 멀티 스레딩는 애플리케이션 내부에서의 멀티 태스킹
Context Switching
멀티 태스킹에서 CPU는 여러 태스크(프로세스, 스레드)를 로테이션으로 돌면서 처리한다. 동작 중인 태스크의 상태를 보관하고 대기 시킨 후 다음 순번의 태스크가 시작할 수 있도록 다음 실행할 태스크의 상태를 불러오는 일련의 과정을
Context Switching
이라고 한다.
멀티 프로세싱
하나의 응용 프로그램을 여러 개의 프로세스로 구성하여 병렬로 각 프로세스가 하나의 작업을 처리하도록 하는 것이다.
특징
장점
- 프로세스 중 하나에 문제가 발생해도 다른 프로세스에 영향을 미치지 않는다.
단점
- Context Switching에서의 오버헤드
- 프로세스는 각각 독립된 메모리 영역을 가지고 있기 때문에 캐쉬 메모리 초기화 후 다시 캐쉬 메모리를 불러와야 한다.
- 프로세스 간의 Context Switching시 단순히 CPU 레지스터 교체 뿐만 아니라 RAM과 CPU 사이의 캐쉬 메모리에 대한 데이터까지 초기화되므로 오버헤드가 크다.
- 프로세스 사이의 어렵고 복잡한 통신 기법(IPC)을 사용
멀티 스레딩
- 하나의 응용 프로그램을 여러 개의 스레드로 구성하여 병렬로 각 스레드가 하나의 작업을 처리하도록 하는 것이다.
- 윈도우, 리눅스 등 많은 운영체제들이 멀티 프로세싱을 지원하고 있지만 멀티 스레딩을 기본으로 하고 있다.
- 웹 서버는 대표적인 멀티 스레드 응용 프로그램이다.
특징
장점
- 메모리 공유로 인한 시스템 자원 소모 감소
- Context Switching 오버헤드 감소(캐쉬 메모리 초기화 필요 없음)
단점
- 데이터 충돌 가능성(동기화 문제)
- 까다로운 디버깅
데드락(Deadlock, 교착 상태)
뮤텍스(Mutex), 세마포어(Semaphore)
크롬 브라우저 및 node.js의 v8 엔진은, 어떻게 가비지 컬렉팅을 하고 있나요?
Memory terminology를 읽어보세요.
참고자료
'프로그래밍 공부 > Computer Science' 카테고리의 다른 글
로그인 API GET or POST? (0) | 2022.02.19 |
---|---|
[컴퓨터 공학 기초] 문자열 (0) | 2021.11.25 |
[인증/보안] HTTPS, Hashing, Salt, Cookie, Session (0) | 2021.11.22 |
[알고리즘] 병합 정렬(merge sort) (0) | 2021.11.16 |
[알고리즘] 퀵 정렬(quick sort) (0) | 2021.11.14 |