3.1 운영체제와 컴퓨터
운영체제의 역할와 구조
역할
- CPU 스케줄링 & 프로세스 관리
- → CPU 소유권을 어떤 프로세스에 할당할지, 프로세스의 생성과 삭제, 자원 할당 및 반환을 관리
- 메모리 관리
- → 한정된 메모리를 어떤 프로세스에 얼만큼 할당해야 하는지 관리
- 디스크 파일 관리
- → 디스크 파일을 어떠한 방법으로 보관할지 관리
- I/O 디바이스 관리
- → 마우스, 키보드와 컴퓨터 간에 데이터를 주고받는 것을 관리
구조
GUI graphical user interface
사용자가 전자장치와 상호 작용할 수 있도록 하는 사용자 인터페이스의 한 형태, 단순 명령어 창이 아닌 아이콘을 마우스로 클릭하는 단순한 동작으로 컴퓨터와 상호 작용할 수 있게 함
CUI character user interface
그래픽이 아닌 명령어로 처리하는 인터페이스
*Linux Server : CUI만 있고 GUI가 없음
드라이버 driver
HW를 제어하기 위한 SW
시스템콜
- OS가 커널에 접근하기 위한 인터페이스
- 유저 프로그램이 OS의 서비스를 받기 위해 커널 함수를 호출할때 사용
- 유저 프로그램이 I/O 요청으로 트랩 trap 발동하면 올바른 I/O 요청인지 확인
→ 유저 모드가 시스템콜을 통해 커널 모드로 변환되어 실행
cf) I/O 요청 ⇒ 입출력 함수, DB, 네트워크, 파일 접근 등에 관한 일
- ex) I/O 요청인 fs.readFile()이라는 파일 시스템의 파일 읽는 함수가 발동한 경우
⇒ 유저 모드에서 파일을 읽지 않고, 커널 모드로 들어가 파일을 읽고 다시 유저 모드로 돌아간 후 뒤에 있는 유저 프로그램 로직 수행- 컴퓨터 자원에 직접적인 접근 차단 가능
- 프로그램을 다른 프로그램으로부터 보호 가능
- 프로세스 or 스레드에서 OS로 어떠한 요청할 때 시스템콜와 커널을 거쳐 OS에 전달됨
- 시스템콜은 하나의 추상화 계층
⇒ 장점: 추상화 계층이므로 네트워크 통신이나 데이터베이스 같은 낮은 단계의 영역 처리를 크게 신경쓰기 않고 프로그램 구현 가능
modebit
⇒ 1 or 0의 값을 가지는 플래그 변수
- 시스템콜이 작동될 때 modebit을 참고해서 유저 모드와 커널 모드를 구분함
- 운영체제를 통해 작동하게 해서 외부 공격을 막기 위한 장치
- 0 ⇒ 커널 모드, 1 ⇒ 유저 모드
modebit은 시스템콜에서 사용되는 인자 값의 한 종류
유저 모드
유저가 접근할 수 있는 영역을 제한해 컴퓨터 자원에 함부로 침범하지 못하도록 하는 모드
커널 모드
모든 컴퓨터 자원에 접근할 수 있는 모드
커널
운영체제의 핵심부분
시스템콜 인터페이스 제공
보안, 메모리, 프로세스, 파일 시스템, I/O 디바이스, I/O 요청관리 등 운영체제의 중추 역할 수행
컴퓨터의 요소
⇒ 컴퓨터는 CPU, DMA 컨트롤러, 메모리, 타이머, 디바이스 컨트롤러 등으로 이루어짐
CPU central processing unit
⇒ 산술논리연산장치, 제어장치, 레지스터로 구성되어 있는 컴퓨터 장치를 말함
- 인터럽트에 의해 단순히 메모리에 존재하는 명령어를 해석해서 실행
- OS의 커널이 프로그램을 메모리에 올려 프로세스를 만들면 CPU가 처리함
제어장치 CU control unit
⇒ 프로세스 조작을 지시하는 CPU의 한 부품
- 입출력 장치 간 통신을 제어
- 명령어들을 읽고 해석
- 데이터 처리를 위한 순서 결정
레지스터 register
⇒ CPU안에 있는 매우 빠른 임시기억장치
- CPU와 직접 연결되어 있기에 연산 속도가 메모리보다 매우 빠름
- CPU는 자체적으로 데이터를 저장할 방법이 없기에 레지스터를 거쳐 데이터를 전달
산술논리연산장치 ALU arithmetic logic unit
⇒ 덧셈, 뺄셈 같은 두 숫자의 산술 연산, 배타적 논리합, 논리곱 같은 논리 연산을 계산하는 디지털 회로
<CPU의 연산 처리>
- 제어장치가 메모리에 계산할 값을 로드함. 그리고 레지스터에서도 로드함
- 제어장치가 레지스터에 있는 값을 계산하라고 산술논리연산장치에 명령함
- 제어장치가 계산된 값을 다시 ‘레지스터에서도 메모리’로 계산한 값을 저장
인터럽트
⇒ 어떤 신호가 들어왔을때 CPU를 잠깐 정지시키는 것
- 인터럽트가 발생하면 인터럽트 핸들러 함수가 모여 있는 인터럽트 벡터로 가서 인터럽트 핸들러 함수가 실행됨
- 인터럽트가 발생하는 원인
- 키보드, 마우스 등의 IO 디바이스
- 0으로 숫자를 나누는 산술연산
- 프로세스 오류
- 인터럽트 간에 우선순위가 있음
- 인터럽트의 종류
- 하드웨어 인터럽트
- 소프트웨어 인터럽트
인터럽트 핸들러 함수
- 인터럽트가 발생했을 때 이를 핸들링하기 위한 함수
- 커널 내부의 IRQ를 통해 호출됨
- request_irq()를 통해 인터럽트 핸들러 함수 등록 가능
하드웨어 인터럽트
- IO 디바이스에서 발생하는 인터럽트 (키보드 연결, 마우스 연결 등)
- 인터럽트 라인 설계 이후 순차적인 인터럽트 실행 중지
- 운영체제에 시스템콜을 요청해서 원하는 디바이스에 있는 작은 로컬 버퍼에 접근해 일 수행
소프트웨어 인터럽트
⇒ 트랩 trap이라고도 함
- 프로세스 오류 등으로 프로세스가 시스템콜 호출 시 발동
DMA 컨트롤러
⇒ I/O device가 메모리에 직접 접근할 수 있도록 하는 하드웨어 장치
- CPU에만 너무 많은 인터럽트 요청이 들어오기 때문에 CPU 부하를 막아주며 CPU의 일을 부담하는 보조 역할
- 하나의 작업을 CPU와 DMA 컨트롤러가 동시에 하는 것을 방지
메모리 memory
⇒ RAM random access memory을 일컬어 메모리라고도 함
- 전자회로에서 데이터나 상태, 명령어 등을 기록하는 장치
- 기억을 담당
- cf) CPU는 계산을 담당
- 메모리가 크면 클수록 많은 일을 동시에 할 수 있음
타이머 timer
⇒ 몇초 안에는 작업이 끝나야 한다는 것을 정하고 특정 프로그램에 시간 제한을 다는 역할
- 시간이 많이 걸리는 프로그램이 작동할때 제한을 걸기 위해 존재함
디바이스 컨트롤러 device controller
⇒ 컴퓨터와 연결되어 있는 IO devices의 작은 CPU
- 옆에 붙어 있는 로컬 버퍼는 각 디바이스에서 데이터를 임시로 저장하기 위한 작은 메모리를 뜻함
3.2 메모리
메모리 계층
⇒ 레지스터, 캐시, 메모리, 저장장치로 구성
- 레지스터
- CPU 안에 있는 작은 메모리
- 휘발성
- 속도 가장 빠름
- 기억 용량 가장 적음
- 캐시
- L1, L2 (+L3) 캐시
- 휘발성
- 속도 빠름
- 기억 용량 적음
- 주기억장치
- RAM
- 휘발성
- 속도 보통
- 기억 용량 보통
- 보조기억장치
- HDD, SSD
- 비휘발성
- 속도 느림
- 기억 용량 많음
램 RAM
⇒ 하드디스크로부터 일정량의 데이터 복사해서 임시 저장하고 이를 필요할 때마다 CPU에 빠르게 전달하는 역할
- 계층 위로 올라갈수록 가격 ⬆️, 용량 ⬇️, 속도 ⬆️
- 메모리의 계층이 존재하는 이유
- 경제성
- 캐시
캐시 cache
⇒ 데이터를 미리 복사해 놓은 임시 저장소이자 빠른 장치와 느린 장치에서 속도 차이에 따른 병목 현상을 줄이는 역할
- 데이터 접근하는 시간이 오래 걸리는 경우를 해결
- 무언가를 다시 계산하는 시간을 절약할 수 있음
캐싱 계층
⇒ 속도 차이를 해결하기 위해 계층과 계층 사이에 있는 계층
- ex) 메모리와 CPU 사이의 속도 차이가 크기 때문에 중간에 레지스터 계틍을 둬서 속도 차이 해결
- ex) 캐시 메모리와 보조기억장치 사이에 있는 주기억장치 → 보조기억장치의 캐싱 계층
지역성의 원리
- 캐시 계층을 두는 것 말고 캐스를 직접 설정할 때는?
- → 자주 사용하는 데이터를 기반으로 설정해야 함
⇒ 자주 사용되는 데이터에 대한 근거가 지역성
- 지역성의 종류
- 시간 지역성 temporal locality
- 공간 지역성 spatial locality
시간 지역성 temporal locality
⇒ 최근 사용한 데이터에 다시 접근하려는 특성
- ex) for문 코드 안의 변수 i에 계속해서 접근하는 경우
let arr = Array.from({length : 10}, ()=> 0);
console.log(arr)
for (let i = 0; i < 10; i += 1) {
arr[i] = i;
}
console.log(arr)
/*
[
0, 0, 0, 0, 0,
0, 0, 0, 0, 0
]
[
0, 1, 2, 3, 4,
5, 6, 7, 8, 9
]
*/
공간 지역성 spatial locality
⇒ 최근 접근한 데이터를 이루고 있는 공간이나 그 가까운 공간에 접근하려는 특성
- ex) 앞 코드에서 공간을 나태는 배열 arr의 각 요소들에 i가 할당되며 해당 배열에 연속적으로 접근함
캐시히트 & 캐시미스
- 캐시히트 cache hit
- 캐시에서 원하는 데이터를 찾았을때
- 원하는 데이터를 제어장치를 거쳐 가져옴
- ⇒ 위치 가깝고, CPU 내부 버스를 기반으로 작동하므로 속도 빠름
- 캐시미스 cache miss
- 해당 데이터가 캐시에 없다면 주메모리로 가서 데이터를 찾아오는 것
- 원하는 데이터를 메모리에서 가져옴
- ⇒ 시스템 버스를 기반으로 작동하므로 속도 느림
캐시매핑 cache mapping
⇒ 캐시가 히트되기 위해 매핑하는 방법을 말함
- CPU의 레지스터와 주메모리(=RAM) 간에 데이터를 주고받을 때를 기반으로 설명
- 레지스터는 RAM에 비하면 작고, RAM은 크기 때문에 작은 레지스터가 캐시 계층으로써 역할을 잘해주려면 매핑 어떻게 하느냐가 중요함
- 캐시 매핑 분류
- 직접 매핑 directed mapping
- 메모리 블록을 정해진 하나의 캐시 블록에만 매핑
- 처리가 빠름
- 충돌 발생이 잦음
- 연관 매핑 associative mapping
- 순서를 일치시키지 않고 관련 있는 캐시와 메모리를 매핑
- 충돌이 적음
- 속도가 느림
- 집합 연관 매핑 set associative mapping
- 직접 매핑과 연관 매핑을 합침
- 순서는 일치시키지만 집합을 둬서 저장
- 메모리 블록을 정해진 블록의 집합 내 어디든 매핑
- 검색 효율적
- 직접 매핑 directed mapping
웹 브라우저의 캐시
⇒ 쿠키, 로컬 스토리지, 세션 스토리지
- 보통 사용자의 커스텀한 정보나 인증 모듈 관련 사항들을 웹 브라우저에 저장해서 추후 서버에 요청할때 자신을 나타내는 아이덴티티나 중복 요청 방지를 위해 쓰이며 origin에 종속됨ex) https://example.com:443
- 프로토콜: https
- 호스트: example.com
- 포트: 443
- 웹 브라우저의 캐시가 오리진에 종속된다 = 캐시된 데이터가 특정 오리진 (프로토콜, 호스트, 포트의 조합)에만 적용되고, 동일한 오리진을 공유하는 경우에만 해당 데이터가 사용됨
- cf) 오리진 origin ⇒ URL의 프로토콜, 호스트(도메인), 포트 번호를 합친 것
- 쿠기
- 만료기한이 있는 키-값 저장소
- same site 옵션을 strict로 설정하지 않았을 경우 다른 도메인에서 요청했을 때 자동 전송됨
- 4KB까지 데이터 저장 가능
- 만료기한 설정 가능
- 쿠키 설정 시 document.cookie로 쿠키를 볼 수 없도록 httponly 옵션 걸어야 함
- 클라이언트 또는 서버에서 만료기한 설정 가능 => 보통 서버에서 설정
- 로컬 스토리지
- 만료기한이 없는 키-값 저장소
- 5MB까지 데이터 저장 가능
- 웹브라우저 닫아도 유지됨
- HTML5를 지원하지 않는 웹 브라우저에서는 사용 불가
- 클라이언트에서만 수정 가능
- 세션 스토리지
- 만료기한이 없는 키-값 저장소
- 탭 단위로 세션 스토리지 생성
- 탭 닫으면 해당 데이터 삭제됨
- 5MB까지 데이터 저장 가능
- HTML5를 지원하지 않는 웹 브라우저에서는 사용 불가
- 클라이언트에서만 수정 가능
데이터베이스의 캐싱 계층
- 데이터베이스 시스템 구축 시 메인 데이터베이스 위에 레디스(redis) 데이터베이스 계층을 '캐싱 계층'으로 두어 성능 향상시킴
메모리 관리
=> 운영체제가 하는 일 (컴퓨터 내의 한정된 메모리를 극한으로 활용)
가상 메모리 virtual memory
⇒ 메모리 관리 기법의 하나로 컴퓨터가 실제로 사용 가능한 메모리 자원 추상화
- 사용자들에게 매우 큰 메모리로 보이도록 함
- 가상 메모리는가상 주소와 실제 주소가 매핑되어 있고 프로세스의 주소 정보가 들어 있는 '페이지 테이블'로 관리됨 → 이때 속도 향상을 위해 TLB 사용함
- TLB translation lookaside buffer 페이지 정보 캐시
⇒ 주소 변환을 위해 메모리와 CPU 사이에 있는 캐시
- 페이지 테이블에 있는 리스트 보관하여 CPU가 페이지 테이블까지 갈 필요 없도록 해 속도 향상시키는 캐시 계층
- 가상 주소 logical address
- ⇒ 가상적으로 주어진 주소
- 실제 주소 physical address
- ⇒ 실제 메모리상에 있는 주소
- 메모리관리장치 MMU memory management unit
- ⇒ 가상 주소를 실제 주소로 변환되며 사용자는 실제 주소를 의식하지 않고 프로그램 구축 가능
스와핑 swapping
⇒ 페이지 폴트 발생 시 메모리에서 당장 사용하지 않는 영역을 하드디스크로 옮기고 하드디스크의 일부분을 메모리처럼 불러와 사용하는 것
- 페이지 폴트가 발생하지 않은 것처럼 만듦
페이지 폴트 page fault
- 프로세스가 참조하려는 가상 메모리 페이지가 물리적 메모리에 현재 로드되어있지 않을 때 발생
- 프로세스가 필요로 하는 페이지를 효율적으로 로드·관리하는데 필요
- 물리적으로 메모리의 크기가 한정되어 있어도 프로세스가 더 큰 가상 메모리 공간을 사용할 수 있도록 함
- 페이지 폴트와 스와핑 과정
- 어떤 명령어가 유효한 가상 주소에 접근했으나 해당 페이지가 없다면 트랩 발생 => 운영체제에 알림
- 운영체제는 실제 디스크에서 사용되지 않는 프레임 찾음
- 해당 프레임을 실제 메모리에 가져와서 페이지 교체 알고리즘을 사용해 특정 페이지와 교체함 (이때 스와핑 발생)
- 페이지 테이블 갱신한 후 해당 명령어 다시 시작
cf) 페이지 page ⇒ 가상 메모리를 사용하는 최소 크기 단위
프레임 frame ⇒ 실제 메모리를 사용하는 최소 크기 단위
스레싱 thrashing
⇒ 메모리의 페이지 폴트 page fault율이 높은 것
- 운영체제가 대부분의 시간을 페이지 교체, 디스크 I/O 작업에 소비하므로 컴퓨터의 성능 저하 초래
- 메모리에 너무 많은 프로세스가 동시에 올라감 → 스와핑 많이 일어나서 발생
- 페이지 폴트 발생→ 가용성 높이기 위해 더 많은 프로세스 메모리에 올림
- → 악순환 반복되며 스레싱 발생
- → CPU 이용률 ⬇️
- 해결 방법
- 메모리 늘림
- HDD를 SSD로 바꿈
- 작업 세트
- PFF
작업세트 working set
⇒지역성(프로세스의 과거 사용 이력)을 통해 결정된 페이지 집합 만들어서 미리 메모리에 로드하는 것
- 미리 메모리에 로드 → 탐색에 드는 비용, 스와핑 ⬇️
PFF page fault frequency
⇒ 페이지 폴트 빈도 조절하는 방법
- 상한선와 하한선을 만드는 방법
- 상한선에 도달 → 프레임 늘림
- 하한선에 도달 → 프레임 줄임
메모리 할당
⇒ 시작 메모리 위치, 메모리의 할당 크기를 기반으로 메모리에 프로그램 할당
- 메모리 할당 종류
- 연속 할당
- 불연속 할당
연속 할당
⇒ 메모리에 '연속적'으로 공간 할당
- 고정 분할 방식 fixed partition allocation
- 메모리 미리 나뉘어 있음 → 융통성 X
- 내부 단편화 발생
- ⇒ 메모리를 미리 나눠 관리하는 방식
- 가변 분할 방식 variable partition allocation
- 내부 단편화 발생 X
- 외부 단편화 발생 O
- 최초적합 first fit
- 위쪽이나 아래쪽부터 시작해서, 홀을 찾으면 바로 할당
- 최적적합 best fit
- 프로세스보다 크기가 큰 공간 중 가장 작은 홀부터 할당
- 최악적합 worst fit
- 프로세스의 크기와 가장 차이가 많이 나는 홀에 할당
- ⇒ 매 시점 프로그램의 크기에 맞게 동적으로 메모리를 나눔
내부 단편화 internal fragmentation
⇒ 메모리를 나눈 크기 > 프로그램
- 남는 공간이 많이 발생하는 현상
외부 단편화 external fragmentation
⇒ 메모리를 나눈 크기 < 프로그램
- 들어가지 못하는 공간이 많이 발생하는 현상
홀 hole
⇒ 할당할 수 있는 빈 메모리 공간
불연속 할당
⇒ 메모리를 '불연속'적으로 할당하는 방법이며 현대 운영체제에서는 페이징 기법을 활용
- 페이징 paging
- 장점: 홀의 크기 균일
- 단점: 주소 변환 복잡
- ⇒ 메모리를 동일한 크기의 페이지 (보통 4KB)로 나누고 프로그램마다 페이지 테이블을 두어 이를 통해 메모리에 프로그램 할당
- 세그멘테이션 segmentation
- 메모리 → 코드 영역, 데이터 영역, 스택 영역, 힙 영역으로 구성
- 코드-데이터로 나누거나 코드 내의 작은 함수를 세그먼트로 나눌 수도 있음
- 장점: 공유 쉬움, 보안 좋음
- 단점: 홀 크기 균일하지 않음
- ⇒ 페이지 단위가 아닌 의미 단위인 세그먼트(segment)로 나눔
- 페이지드 세그멘테이션 paged segmentation
- 프로그램을 의미 단위인 세그먼트로 나누고, 임의의 길이가 아닌 동일한 크기의 페이지 단위로 나눔
- 공유, 보안 측면에 강점
페이지 교체 알고리즘
- 페이지 교체 알고리즘 기반으로 스와핑 발생
- 스와핑은 많이 일어나지 않도록 설계되어야 함
- 오프라인 알고리즘 offline algorithm
- 가장 좋은 방법
- but 미래에 사용되는 프로세스 알 수 없음
- → 다른 알고리즘과의 성능 비교를 위한 상한기준(upper bound) 제공
- ⇒ 먼 미래에 참조되는 페이지와 현재 할당하는 페이지 바꾸는 알고리즘
- FIFO first in first out
- ⇒ 가장 먼저 온 페이지를 가장 먼저 교체하도록 하는 방법
- LRU least recently used
- 단점: 오래된 것 파악 위해 각 페이지마다 계수기, 스택 둬야 함
- ⇒ 참조가 가장 오래된 페이지 교체
- NUR not used recently
- LRU에서 발전한 알고리즘
- = clock 알고리즘
- 시계방향으로 돌면서 0(참조되지 않은 비트)을 찾은 순간 해당 프로세스를 교체하고 해당 부분을 1(최근에 참조된 비트)로 바꿈
- LFU least frequently used
- ⇒ 가장 참조 횟수가 적은 페이지 교체
3.3 프로세스와 스레드
⇒ 프로세스: 컴퓨터에서 실행되고 있는 프로그램, CPU 스케줄링의 대상이 되는 작업 (task)
프로세스와 컴파일 과정
⇒ 컴퓨터가 이해할 수 있는 기계어로 번역되어 실행할 수 있는 파일이 되는 것
전처리
⇒ 소스 코드의 주석을 제거하고 #include등 헤더 파일을 병합하여 매크로를 치환
컴파일러
⇒ 오류 처리, 코드 최적화 작업을 하며 어셈블리어로 변환
어셈블러
⇒ 어셀블리어는 목적 코드 object code로 변환됨
링커
⇒ 실행 파일을 만듬 (.exe)
정적 라이브러리
⇒ 프로그램 빌드 시 라이브러리가 제공하는 모든 코드를 실행 파일에 넣는 방식
동적 라이브러리
⇒ 프로그램 실행 시 필요할 때만 DLL이라는 함수 정보를 통해 참조하는 방식
프로세스의 상태
생성 상태
⇒ fork() 또는 exec() 함수를 통해 생성된 상태 → 이때 PCB 할당
- fork(): 부모 프로세스의 주소 공간을 그대로 복사. 새로운 자식 프로세스 생성.
- exec(): 새롭게 프로세스 생성.
대기 상태
⇒ CPU 스케줄러로부터 CPU 소유권이 넘어오기를 기다리는 상태
대기 중단 상태
⇒ 메모리 부족으로 일시 중단된 상태
실행 상태
⇒ CPU 소유권과 메모리를 할당받고 Instruction을 수행 중인 상태
중단 상태
⇒ 어떤 이벤트의 발생 이후 프로세스가 차단된 상태. I/O 디바이스에 의한 interrupt로 많이 발생
일시 중단 상태
⇒ 중단된 상태에서 프로세스가 실행되려 했지만 메모리 부족으로 일시 중단된 상태
종료 상태
메모리와 CPU 소유권을 모두 놓고 가는 상태
프로세스의 메모리 구조
- 스택: 지역변수, 매개변수, 함수 저장. 컴파일 시에 크기 결정
- 힙: 런타임 시에 크기 결정
- 데이터 영역: 전역 변수, 정적 변수 저장
- 코드 영역: 프로그램에 내장되어 있는 소스코드가 들어가는 영역
PCB process control block
⇒ 운영체제에서 프로세스에 대한 메타데이터를 저장한 '데이터'를 말함, 프로세스 제어 블록
- 프로세스 스케줄링 상태, 프로세스 ID, 프로세스 권한, 프로세스 카운터, CPU 레지스터, CPU 스케줄링 정보, 계정 정보, I/O 상태 정보
- 컨텍스트 스위칭: PCB를 교환하는 과정
멀티프로세싱
⇒ 여러개의 프로세스, 즉 멀티프로세스를 통해 동시에 두가지 이상의 일을 수행할 수 있는 것을 말함
웹 브라우저
- 브라우저 프로세스
- 렌더러 프로세스
- 플러그인 프로세스
- GPU 프로세스
IPC inter process communication
⇒ 프로세스끼리 데이터를 주고받고 공유 데이터를 관리하는 메커니즘
공유 메모리
⇒ 프로세스가 서로 통신할 수 있도록 공유 버퍼를 생성하는 것
파일
⇒ 디스크에 저장된 데이터 또는 파일 서버에서 제공한 데이터
소켓
⇒ 동일한 컴퓨터의 다른 프로세스나 네트워크의 다른 컴퓨터로 네트워크 인터페스를 통해 전송하는 데이터
익명 파이프
⇒ 프로세스 간에 FIFO 방식으로 읽히는 임시 공간인 파이프를 기반으로 데이터를 주고 받음
명명 파이프
⇒ 파이프 서버와 하나 이상의 파이프 클라이언트 간의 통신을 위한 명명된 단방향 또는 이중 파이프를 말함
메시지 큐
⇒ 메시지를 큐 데이터 구조 형태로 관리하는 것
스레드와 멀티스레딩
- 스레드: 프로세스의 실행 가능한 가장 작은 단위
- 멀티스레딩: 프로세스 내 작업을 여러 개의 스레드, 멀티스레드로 처리하는 기법이며 스레드끼리 서로 자원을 공유하기 때문에 효율성이 높다.
공유 자원과 임계 영역
공유 자원: 시스템 안에서 각 프로세스, 스레드가 함께 접근할 수 있는 모니터, 프린터, 메모리, 파일, 데이터 등의 자원이나 변수 등을 의미
경쟁 상태: 이 공유 자원을 두 개 이사으이 프로세스가 동시에 읽거나 쓰는 상황
임계 영역: 공유 자원에 접근할 때 순서 등의 이유로 결과가 달라지는 영역
임계 영역을 해결하기 위한 방법은 크게 뮤텍스, 세마포어, 모니터 세가지가 있으며, 이 방법 모두 상호 배제, 한정 대기, 융통성 조건을 만족한다.
뮤텍스: 공유 자원을 사요하기 전에 설정하고 사용한 후에 해제하는 잠금
세마포어: 일반화된 뮤텍스
바이너리 세마포어: 0,1의 두가지 값만 가질 수 있는 세마포어, 구현의 유사성으로 인해 뮤텍스는 바이너리 세마포어라고 할 수 있다.
카운팅 세마포어: 여러 개의 값을 가질 수 있는 세마포어, 여러 자원에 대한 접근을 제어하는데 사용됨
모니터: 둘 이상의 스레드나 프로세스가 공유 자원에 안전하게 접근할 수 있도록 공유 자원을 숨기고 해당 접근에 대해 인터페이스만 제공
교착 상태
교착 상태: 두 개 이상의 프로세스들이 서로 가진 자원을 기다리며 중단된 상태
교착 상태의 원인: 상호 배제, 점유 대기, 비선점, 환형 대기
3.4 CPU 스케줄링 알고리즘
CPU 스케줄러는 CPU 스케줄링 알고리즘에 따라 프로세스에서 해야 하는 일을 스레드 단위로 CPU에 할당
비선점형 방식
⇒ 프로세스가 스스로 CPU 소유권을 포기하는 방식이며, 강제로 프로세스를 중지하지 않는다.
FCFS First Come, First Served
- 가장 먼저 온 것을 가장 먼저 처리하는 알고리즘
SJF: Shortest Job First
- 실행 시간이 가장 짧은 프로세스를 가장 먼저 실행하는 알고리즘
우선순위
⇒ 기존 SJF 스케줄리의 경우 긴 시간을 가진 프로세스가 실행되지 않는 현상이 있음, 오래된 작업일수록 우선순위를 높이는 방법을 통해 단점을 보완하는 알고리즘
선점형 방식
⇒ 현대 운영체제가 쓰는 방식으로 지금 사용하고 있는 프로세스를 알고리즘에 의해 중단시켜 버리고 강제로 다른 프로세스에 CPU 소유권을 할당하는 방식을 말한다.
라운드로빈
- 현대 컴퓨터가 쓰는 스케줄링인 우선순위 스케줄링의 일종으로 각 프로세스는 동일한 할당 시간을 주고 그 시간 안에 끝나지 않으면 다시 준비 큐의 뒤로 가는 알고리즘
SRF
- 중간에 실행시간이 더 짧은 작업이 들어오면 수행하던 프로세스를 중지하고 해당 프로세스를 수행하는 알고리즘
다단계 큐
- 우선순위에 따른 준비 큐를 여러 개 사용하고, 큐마다 라운드 로빈이나 FCFS 등 다른 스케줄링 알고리즘을 적용한 것
'CS 공부' 카테고리의 다른 글
[면접을 위한 CS 전공 지식 노트] 4주차 - 4장 데이터베이스 (0) | 2025.04.16 |
---|---|
[면접을 위한 CS 전공 지식 노트] 2주차 - 2장 네트워크 (1) | 2025.04.02 |
[CS 스터디] 1주차 회고 (0) | 2025.03.27 |
[면접을 위한 CS 전공 지식 노트] 1주차 - 1장 디자인 패턴 & 프로그래밍 패러다임 (0) | 2025.03.26 |