모든 글은 다음 블로그를 참고하여 작성하였습니다.
https://gyoogle.dev/blog/
운영체제
프로세스와 스레드 차이
- 프로세스는 메모리 상에서 실행중인 프로그램을 말하며, 스레드는 이 프로세스 안에서 실행되는 흐름 단위를 말한다.
- 프로세스마다 최소 하나의 스레드를 보유하고 있으며, 각각 별도의 주소공간을 독립적으로 할당 받는다. (code, data, heap, stack)
- 스레드는 이중에 stack만 따로 할당 받고 나머지 영역은 스레드끼리 서로 공유한다.
[요약]
- 프로세스 : 자신만의 고유 공간과 자원을 할당받아 사용
- 스레드 : 다른 스레드와 공간과 자원을 공유하면서 사용
멀티 프로세스로 처리 가능한 걸 굳이 멀티 스레드로 하는 이유는?
- 프로세스를 생성하여 자원을 할당하는 시스템 콜이 감소함으로써 자원의 효율적 관리가 가능함
- 프로세스 간의 통신(IPC)보다 스레드 간의 통신 비용이 적어 작업들 간 부담이 감소함
- 대신, 멀티 스레드를 사용할 때는 공유 자원으로 인한 문제 해결을 위해 ‘동기화’에 신경써야 한다.
교착상태(DeadLock)가 무엇이며, 4가지 조건은?
- 프로세스가 자원을 얻지 못해 다음 처리를 하지 못하는 상태를 말한다.
- 시스템적으로 한정된 자원을 여러 곳에서 사용하려고 할 때 발생하는 문제임
- 교착 상태의 4가지 조건은 아래와 같다.
- 상호배제 : 프로세스들이 필요로 하는 자원에 대해 배타적 통제권을 요구함
- 점유대기 : 프로세스가 할당된 자원을 가진 상태에서 다른 자원 기다림
- 비선점 : 프로세스가 어떤 자원의 사용을 끝날 때까지 그 자원을 뺏을 수 없음
- 순환대기 : 각 프로세스는 순환적으로 다음 프로세스가 요구하는 자원을 갖고 있음
-
이 4가지 조건 중 하나라도 만족하지 않으면 교착상태는 발생하지 않음 (순환대기는 점유 대기와 비선점을 모두 만족해야만 성립함. 따라서 4가지가 서로 독립적이진 않음)
- 교착상태 해결 방법 4가지
- 예방
- 회피
- 무시
- 발견
메모리 계층 (상-하층 순)
- 레지스터 - 캐시 - 메모리 - 하드디스크
메모리 할당 알고리즘 First fit, Next fit, Best fit
- First fit : 메모리의 처음부터 검사해서 크기가 충분한 첫번째 메모리에 할당
- Next fit : 마지막으로 참조한 메모리 공간에서부터 탐색을 시작해 공간을 찾음
- Best fit : 모든 메모리 공간을 검사해서 내부 단편화를 최소화하는 공간에 할당
페이지 교체 알고리즘에 따른 페이지 폴트 방식
- OPT : 최적 교체. 앞으로 가장 오랫동안 사용하지 않을 페이지 교체 (실현 가능성 희박)
- FIFO : 메모리가 할당된 순서대로 페이지를 교체
- LRU : 최근에 가장 오랫동안 사용하지 않은 페이지를 교체
- LFU : 사용 빈도가 가장 적은 페이지를 교체
- NUR : 최근에 사용하지 않은 페이지를 교체
외부 단편화와 내부 단편화란?
- 외부 단편화 : 작업보다 많은 공간이 있더라도 실제로 그 작업을 받아들일 수 없는 경우 (메모리 배치에 따라 발생하는 문제)
- 내부 단편화 : 작업에 필요한 공간보다 많은 공간을 할당받음으로써 발새하는 내부의 사용 불가능한 공간
가상 메모리란?
- 메모리에 로드된, 실행중인 프로세스가 메모리 아닌 가상의 공간을 참조해 마치 커다란 물리 메모리를 갖는것처럼 사용할 수 있게 해주는 기법
페이징과 세그먼테이션이란?
-
페이징
-
페이지 단위의 논리-물리 주소 관리 기법. 논리 주소 공간이 하나의 연속적인 물리 메모리 공간에 들어가야하는 제약을 해결하기 위한 기법 논리 주소 공간과 물리 주소 공간을 분리해야함(주소의 동적 재배치 허용), 변환을 위한 MMU 필요
-
특징 : 외부 단편화를 없앨 수 있음. 페이지가 클수록 내부 단편화도 커짐
-
-
세그먼테이션
- 사용자/프로그래머 관점의 메모리 관리 기법. 페이징 기법은 같은 크기의 페이지를 갖는 것과는 다르게 논리적 단위(세그먼트)로 나누므로 미리 분할하는 것이 아니고 메모리 사용할 시점에 할당됨
뮤텍스, 세마포어가 뭔지, 차이점은?
- 뮤텍스
- 상호배제, 제어되는 섹션에 하나의 스레드만 허용하기 때문에, 해당 섹션에 접근하려는 다른 스레드들을 강제적으로 막음으로써 첫번째 스레드가 해당 섹션을 빠져나올 때까지 기다리는 것 (대기열(큐) 구조라고 생각하면 됨)
- 세마포어
- 운영체제에서 고유 자원에 대한 접속을 제어하기 위해 사용되는 신호. 공유자원에 접근할 수 있는 최대 허용치만큼만 동시에 사용자 접근 가능. 스레드들은 리소스 접근 요청을 할 수 있고, 세마포어는 카운트가 하나씩 줄어들게 되며 리소스가 모두 사용중인 경우(카운트=0) 다음 작업은 대기를 하게 된다.
- 차이점
- 세마포어는 뮤텍스가 될 수 있지만, 뮤텍스는 세마포어가 될 수 없음
- 세마포어는 소유 불가능하지만, 뮤텍스는 소유가 가능함
- 동기화의 개수가 다름
Context Switching이란?
- 하나의 프로세스가 CPU를 사용중인 상태에서 다른 프로세스가 CPU를 사용하도록 하기 위해, 이전의 프로세스 상태를 보관하고 새로운 프로세스의 상태를 적재하는 작업. 한 프로세스의 문매근 그 프로세스의 PCB에 기록됨