Search
📄

운영체제1 특강

mmap이 뭔가? 웹 서버에서 사용했던 거
memset
캐싱이란? 왜 캐싱을 하면 성능 차이가 많이 나는가?
페이지폴트란 무엇인가? 왜 발생하지? 페이지폴트가 발생했을 때, 가상메모리 기술에서 어떤 일이 일어나길래 시간 차이가 발생하는지?
폴트란 무엇인가?
OS가 필요한 이유?
여러 프로그램이 동시에 하드웨어에 접근할때, 순서를 제어하고 충돌이 안 생기도록 하기 위해
하드웨어마다 동작 방식이 약간씩 다르기에, 각 하드웨어에 접근하는 방식을 추상화시켜서 동일한 방식으로 하드웨어를 사용할 수 있도록 함으로써, 하드웨어 종류가 바뀌어도 소프트웨어 코드를 수정할 필요가 없어진다
추상화란?
세부사항은 보지않아도 되게끔 하여, 이해하기 쉽도록 만드는 기법
문제를 푸는 데 필요한 부분만 남기는것
프로세스는 메모리, 코드, CPU, I/O 등을 추상화한 것 → 즉, 프로세스는 컴퓨터를 추상화한 것
스레드를 프로세스라고 부르지 않는 이유?
스레드는 프로세스처럼 메모리 공간이 분리되어있는게 아니라, 하나의 프로세스 안(메모리 영역)에서 공유되기 때문에 프로세스라고 하지 않음. 스레드는 코어를 추상화했다고 할 수 있음
물리메모리에 언제 할당하는가?
요구페이징(demanding page)
프로세스들은 이만큼 할당해달라고 하지만, 실제로는 안 쓰는 명령어들이 많아서, 필요할때 적재
1.
페이지(들) 할당
2.
프리 페이지 리스트로부터 페이지 얻기
3.
페이지(들)을 0으로 채워넣기
프로세스는 컴퓨터를 추상화한 것 → 프로세스들끼리 메모리 공간을 침범하면 안됨 → 기존에 사용하던 페이지의 내용들을 0으로 채워넣지 않고 그대로 사용하면(= 쓰레기값), 추상화 rule에서 벗어나는 행위
4.
페이지(들)를 페이지 테이블에 매핑
Page fault handling
메모리의 두 가지 타입 : anonymous & file-backed ⇒ 페이지를 두 가지 형태로 구분지을 수 있음
아무 근거 없는 페이지 & 하드디스크와 연관된 페이지로 나눌 수 있다
handling I/O events
1.
인터럽트
a.
기기가 CPU에게 필요할 때 요청
2.
Polling
a.
CPU가 기기를 주기적으로 체크
b.
인터럽트가 계속 들어오는 경우? 인터럽트 기반 입출력은, 먼저 인터럽트 핸들러를 off하므로 다음에 들어오는 인터럽트들은 무시되는 형식 → 인터럽트가 자주 발생하는 경우에는 polling 방식을 사용하는 게 좋다
3.
DMA 입출력
a.
file-backed 기반 페이지의 경우 → DMA 입출력을 통해 조금 더 효율적으로 메모리에 필요한 페이지를 적재할 수 있음
4.
프로그램 기반 입출력
abstraction of storage
file : a logical unit of storage
식별자 : pathname = path + filename
파일 안에서의 위치 = offset
파일 = 물리 스토리지의 추상화
filename, offset ⇒ location in storage
<filename, data, metadata> ⇒ <a set of blocks>
indexed allocation
느려서 파일시스템을 하드웨어로 만드는게 의미가 없음
즉, 운영체제가 직접 파일시스템을 관리하므로 파일시스템 종류는 매우 다양
파일 시스템 = 블록을 관리하는 기술
consistency : atomicity & durability
항상 최신 데이터는 메모리에 존재. 그러나 휘발성이므로 디스크에 내용을 갱신시킬 필요가 있다. 디스크와 메모리 간 일관성을 보장해야한다.
원자성 : 메모리 내 데이터는 스토리지 기기에 원자적으로 적용되어야한다.
메타 데이터와 실제 데이터가 바뀔 거면 둘 다 바뀌든, 아니면 둘 다 안 바뀌도록 해야한다
지속성 : 데이터는 스토리지에 있어야한다.
POSIX 계열에서의 파일 시스템은 consistency를 보장하지 않는 방식 → 개발자가 consistency를 보장하도록 코드를 작성해야한다.