캐시
CPU의 속도와 시스템 메모리의 속도 차이 문제를 해결하기 위한 메모리
CPU안에 포함
일반 메모리에 비해 비쌈
L1 - 보통 8~64KB, 명령어 캐시/데이터 캐시로 분리, Per Core
L2 - 보통 64KB ~ 4MB, 명령어/데이터 복합 저장, Per Core
L3 - 3~12MB, CPU가 아닌 메인보드에 내장되는 경우가 많음, Miss Rate때문에 잘 사용하지 않음, Per Processor
* 캐시메모리의 용량을 늘리기 보다 멀티 레벨인 이유? Access Time 줄임, 프로세서 간 충돌 방지
* LRU 알고리즘: 캐시 알고리즘 중 하나, LinkedList 사용, Map을 사용하여 시간단축을 하는 경우도 있음
지역성
기억 장치내의 정보를 균일하게 접근하는 것이 아닌 특정 부분만 집중적으로 참조한다는 특성
- 시간 지역성: 최근에 참조된 주소 내용이 다시 참조
- 공간 지역성: 참조된 주소와 인접한 주소의 내용이 다시 참조
주 기억 장치
현재 CPU가 처리하고 있는 내용을 저장하는 기억장치
용량이 크고 처리 속도가 빠름
보조기억장치에서 데이터를 불러와 CPU의 작업 공간 역할을 해줌
저장되어 있는 정보에 접근하는데 모두 같은 시간이 걸림
- ROM: 읽기만 가능한 기억 장치, 비휘발성
- RAM: 읽고 쓰기 가능, 휘발성, 실행하고 있는 파일은 보조 기억장치에 저장해야함
보조 기억 장치
물리적인 디스크가 연결되어 있는 기억장치
주 기억장치보다 접근 시간이 느림(순차적 접근 방식)
비휘발성, 영구적으로 보관
DMA 방식 사용
CPU가 직접 접근 할 수 없음 (시스템 콜 이용)
- HDD: 디스크를 고속으로 회전시켜 물리적으로 데이터를 저장
- SDD: 반도체 기반, 전기적으로 데이터 저장, HDD보다 속도 빠름
DMA(직접 메모리 접근) 방식
입출력 제어 방식(프로그램/인터럽트/DMA/채널에 의한 IO) 중 하나
주변장치들이 메모리에 직접 접근하여 읽거나 쓸 수 있도록 하는 기능
CPU의 개입 없이 I/O 장치(보조기억장치)와 기억장치(주 기억장치) 사이의 데이터를 전송하는 접근 방식
DMA가 없다면 Data I/O 처리가 끝날 때 까지 CPU가 대기 해야 함
Bus사용하여 명령 전달
하드 디스크
비휘발성, 순차 접근이 가능한 컴퓨터의 보조 기억 장치
구조
- platter: 동그란 판, 앞면과 뒷면으로 구성
- head & arm: 플레터의 표면에 데이터를 쓰거나 읽어옴, arm에 head가 붙어 있음
- track & sector: 데이터를 저장하는 공간을 track, track을 작은 단위로 쪼갠 것이 sector
- spindle motor: 모터로 플래터들을 회전
- seek, rotation, data transfer: head가 원하는 track으로 가는 걸 seek(제일 느림), track에서 해당 sector를 찾는 걸 rotation, 데이터를 읽는 것을 data transfer이라고 한다.
- cylinder: 동심원 크기의 트랙들의 집합
대용량 파일을 메모리에 저장하는 순서
1) 트랙에 연속적으로 파일을 배치
2) track의 아랫면에 배치
3) 밑의 platter에 배치
> head가 덜 움직일 수 있도록
보조 기억장치에 저장 과정
CPU명령 -> BUS 사용 요구 -> BUS 사용 허가 -> 데이터 전송 -> 인터럽트
MMU
CPU가 메모리에 접근하는 것을 관리하는 컴퓨터 하드 웨어 부품
가상 메모리 주소를 실제 메모리 주소로 변환
페이지 변환 정보가 담겨있는 자료구조를 페이지 테이블이라고 함
가상 메모리
프로세스가 가상의 공간을 참조하여 커다란 물리 메모리를 가지고 있는 것처럼 사용하는 것
페이징과 세그멘테이션 방식이 있음
보조기억장치에서 프로세스의 일부만 메모리에 로드
페이징
프로세스의 주소 공간을 일정한 사이즈의 페이지로 나누어 메모리에 불연속적으로 저장하는 방식
메모리는 Frame으로 분할되고, 프로세스는 Page로 분할
외부 단편화 해소 / 내부 단편화 발생
세그멘테이션
프로세스를 서로 크기가 다른 세그먼트 단위로 분할하고 메모리에 배치하는 방식
내부 단편화 해소 / 외부 단편화 발생
* 대부분 페이징 기법을 쓰는 이유?
서로 다른 크기의 프로세스로 인해 여러 크기의 hole이 발생
이 hole을 할당하는 것에 대한 최적화 알고리즘이 없음
이는 곧 외부 단편화로 메모리 낭비가 심해짐
Demand Paging
실행 시작 시에 프로그램 전체를 물리 메모리에 적재하는 대신, 초기에 필요한 것들만 적재하는 방법
한 번도 접근 되지 않은 페이지는 물리 메모리에 적재되지 않는다.
Page Fault
실행 시켜야 할 페이지가 메모리에 올라와 있지 않은 것
Swapping
메모리에 적재된 프로세스를 내보내고(swap out), 원하는 프로세스를 불러 들이는(swap in) 방식
페이지 교체 알고리즘
- FIFO: First-In-First-Out
* Belady 의 모순: 페이지 프레임의 갯수를 늘려도 되려 페이지 부재가 더 많이 발생하는 모순
- OPR: 앞으로 가장 오랫동안 사용되지 않을 페이지를 찾아 교체, 구현 어려움
- LRU: 가장 오랫동안 사용되지 않은 페이지 교체
- LFU: 참조 횟수가 가장 적은 페이지 교체
- MFU: 참조 횟수가 가장 많은 페이지 교체(참조 횟수가 가장 적은 페이지가 최근에 적재된 것이라는 가정)
TLB
page table의 캐시
프로세스
메모리에 올라와 실행되고 있는 프로그램
프로세스에 대한 정보를 저장하는 PCB 생성
스레드
프로세스에서 실행되는 흐름의 단위
프로세스에서 Stack만 따로 할당 받고 Code,Data, Heap 영역 공유
멀티 스레드 vs 멀티 프로세스
스레드는 같은 데이터 공간을 공유할 수 있지만 프로세스는 접근할 수 없다.
멀티 스레드는 자원 할당 시스템 콜(Context Switching)이 줄어 들어 자원 효율적 관리
처리 비용 감소(IPC보다 스레드 간의 통신 비용이 적음)
* 동기화 문제가 생길 수 있음
Context Switching
현재 진행하고 있는 프로세스/쓰레드의 상태를 저장하고 다음 진행할 프로세스/스레드의 상태 값을 읽어 적용하는 과정
스케쥴러
CPU가 다음 작업을 수행할 프로세스를 선택해주는 운영체제의 커널 모듈
- 장기 스케쥴러: 어떤 프로세스가 Ready Queue에 삽입될 지 결정
- 단기 스케쥴러: 스케쥴링 알고리즘에 따라 CPU를 할당할 프로세스를 선택
- 중기 스케쥴러: 메모리에 너무 많은 프로그램이 올라가는 것을 조절
스케쥴링 알고리즘
비선점형
- FCFS: First Come First Served
- SJF: CPU burst time이 가장 짧은 프로세스에게 할당
> 기아 현상 발생
선점형
- RR: 각 프로세스는 동일한 크기의 할당 시간을 가지고 있음, CPU 사용시간이 랜덤한 프로세스들이 섞여 있을 경우 효율적
- SRTF: 새로운 프로세스가 도착할 때마다 CPU burst time이 가장 짧은 프로세스에게 할당 ( 기아 현상 발생 )
* CPU burst time: CPU가 일을 수행하는 시간
- Multi-level Queue: Ready Queue를 여러 개로 분할해 관리하는 스케쥴링
- Multi-level feedback Queue: Multi-level Queue와 동일하나, 프로세스가 다른 큐로 이동 가능
둘 다 해당
- Priority Scheduling: 우선 순위가 가장 높은 프로세스에게 CPU를 할당, aging으로 기아 현상 해결
세마포어
접근하는 최대 사용자수를 정수 값으로 가지는 변수
카운팅 세마포어 / 이진 세마 포어
뮤텍스(프로세스)/모니터(스레드)
임계 영역에 lock 을 걸어 접근하지 못하도록 하고, 임계 영역에서 나와 해당 lock을 해제한다.
한 개의 프로세스/쓰레드만 접근
lock을 획득한 프로세스/쓰레드가 lock을 해제해야 함
* 임계 영역: 한 번에 하나의 프로세스/쓰레드만 이용하게 보장해주어야 하는 영역 (상호배제/진행/한정된 대기)
> 모두 병행 처리를 위한 동기화 방법
데드락
프로세스가 자원을 얻지 못하여 다음 처리를 하지 못해 무한정 대기하는 상태
조건
- 상호배제: 한 프로세스만 자원 사용 가능
- 점유대기: 사용되고 있는 자원을 점유하기 위해 대기하는 프로세스 존재
- 비선점: 자원을 강제로 뺏을 수 없음
- 순환대기: 순환 형태로 자원 대기
해결방법
- 예방: 발생 조건 중 하나를 제거, 자원 낭비가 심함
- 회피: 교착 상태 발생시 피해감 ex) 은행원 알고리즘
- 탐지: 자원 할당 그래프를 통해 교착 상태 탐지, 오버 헤드 발생
- 회복: 프로세스를 종료하거나 자원을 해제시켜 회복
Kernel
하드웨어와 응용 프로그램 사이에 인터페이스를 제공해주는 역할
응용프로그램이 하드웨어에서부터 오는 자원을 관리하고 사용 할 수 있게 해주는 역할
인터럽트
CPU와 I/O의 속도 차이를 극복하기 위해
하드웨어 장치가 CPU에 서비스를 요청하는 경우
- 외부 인터럽트: 하드웨어가 발생시키는 인터럽트
- 내부 인터럽트: CPU 내부의 인터럽트 ex) Divide By Zero
- 소프트웨어 인터럽트: 소프트웨어가 발생시키는 인터럽트 ex) Exception, System call
시스템콜
응용 프로그램의 요청에 따라 커널에 접근하기 위한 인터페이스
ex) 파일 입출력
커널 모드와 유저 모드
커널 수준 스레드와 사용자 수준 스레드
메모리 풀(Memory pool)
IPC
동기/비동기/블락/언블락 + 쓰이는곳
참고
https://mindstation.tistory.com/152
https://sonb3579.tistory.com/15
https://sonb3579.tistory.com/18
https://coolenjoy.net/bbs/37/2098?sst=wr_hit&sod=desc&sop=and&page=236&device=mobile
https://jhnyang.tistory.com/105
https://kkhipp.tistory.com/168
https://github.com/WeareSoft/tech-interview/blob/master/contents/os.md
https://github.com/JaeYeopHan/Interview_Question_for_Beginner/tree/master/OS
https://github.com/Today-I-Learn/backend-study/tree/develop/OS
https://github.com/WooVictory/Ready-For-Tech-Interview
https://github.com/SSAFY-CS-STUDY/Tech_interview/tree/main/03.Operating_system
'CS' 카테고리의 다른 글
[CS] 동기/비동기, 블록/논블록 (1) | 2022.10.26 |
---|---|
신입 개발자 면접 스터디 - DB (0) | 2021.06.10 |
신입 개발자 면접 스터디 - 자바 (0) | 2021.05.31 |