OS 특강

Ena JJJ·2022년 12월 20일

cs에서 제일 중요한 것?

-> problem decompostion(divde and conquer)이다.
이는 추상화랑 비슷하다. 왜 비슷하냐? -> 추상화는 CPU,메모리,file 이라는 추상화 계층으로 문제를 나누어서 해결하기 때문이다.

shallow interface vs deep interface>

deepinterface가 더 좋은 인터페이스 디자인이다.
shallow 인터페이스의 한 종류는 자바이다. 예로 인터페이스 명이 body보다 길 경우가 있다. 차라리 바디를 직접 쓰는 것이 현명하다.

deep 인터페이스의 종류는 유닉스의 read,wirte,close 같은 시스템 콜이다. 이러한 시스템 콜에는 디스크 스케쥴링, 권한 매니징, 블락 스케줄링 등이 깊이 숨겨져 있으며 프로그래머는 이를 직접 다룰 일이 없다.

OS의 중요한 역할

  1. abstraction 하드웨어 사용을 추상화 한다
  2. protection & Isolation
  • 응용 프로그램의 잘못된 행동이나 오사용등을 막는다.(protection)
  • 응용 프로그램(프로세스)간 영역을 침범을 막는다(isolation)
  1. Sharing

OS 디자인 First Thought

  1. 하드웨어 디테일에 상관없이 프로그램만 잘 짜게 하고 싶다
  2. OS는 여러개의 어플리케이션을 써야하기 때문에 하드웨어의 자원을 유용하게 써야한다.
  3. 어플리케이션간 서로 충돌이 나지 않도록 보호해줘야한다

하드웨어를 쉽게 사용할 수 있을까?

  1. 하드웨어의 추상화를 만들고 프로세스와 bind 한다
  • CPU -> Virtualizing CPU
  • Memory -> Virtual address space
  • Storage -> File
  1. OS디자이너들은 application이 추상화를 사용할 수 있도록 System call이라는 API를 제공한다.

address space의 추상화

virtual address랑 physical address를 연결하는 것은?

  • page table을 통해 매핑한다.

Q&A

페이지 테이블은 DRAM에 저장
페이징을 위한 OS의 역할 ? -> 페이징 테이블 관리
페이징을 위한 하드웨어의 역할? -> OS보다 DRAM이 빠르기 때문에 실제 메모리 translate을 MMU라는 하드웨어의 지원을 받아서 한다.

언제 물리 메모리가 할당이 될까?

실제 페이지가 요청이 될 때, 메모리에 할당이 된다. OS가 세팅해준다
즉, 어플케이션이 할당되지 않은 물리 메모리로 처음 접근할 때 할당된다.

OS의 서브시스템이 파일과 물리 storage를 매핑하는 것을 file system이라 부른다.

어떻게 file과 storage media를 매핑할까?
file은 block이라 불리는 small chunks(4kb)로 나누어 진다. 블록 address라고 불리는 스토리지 location에 각 블록을 매핑한다.

왜 VFS(Virtual File Systme)이 필요할까

  • 다양한 하드웨어에서 파일 시스템을 사용할 수 있도록 하기 위함이다.

consistency를 유지하기 위해서는 atomicity와 durability를 만족해야한다.
즉, 데이터를 저장할거면 저장하고 , 아니면 말고, 그리고 데이터는 영구적으로 스토리지에 남아 있어야한다. 이를 위해서 저널링을 사용하며 fsync 시스템콜을 이용한다.

파일업데이트를 위해서 기존 데이터 롤백을 위해 기존데이터를 저장하고, 원자성을 보장하기 위해 fsync를 사용한다. 파일만 fsync를 write를 확인하는 것이 아니라, 디렉토리도 디스크에 안써질 경우도 있기 때문에 디렉토리에 대해서도 fsync로 저장을 확인하다.

어떻게 OS가 Protection을 제공할까?

하드웨어가 어플리케이션의 권한을 확인하여 시스템콜을 실행할지, 거부할지 정한다. (링레벨)
OS는 하나의 어플리케이션이 다른 어플리케이션의 메모리에 read/write 하는 것을 막아준다.
어플리케이션으로 부터 컨트롤을 반드시 얻을 수 있어야 한다. -> application이 cpu를 무한히 점유하는 상황 방지

IPC

  1. shared memory - 속도가 빠르다. 하나의 캐시에서 데이터가 업데이트 되면 다른 코어의 캐시에서도 데이터가 업데이트 된다. cache coherence protocol을 통해 업데이트 된다. 이는 캐시의 일관성을 위한 하드웨어적인 프로토콜이다.

  2. message passing
    프로세스1의 데이터를 커널의 메시지 버퍼로 카피해서 커널의 pipe가 process 2번 메모리로 메시지를 전달한다.

CPU(single CPU)
스케쥴링을 통해 CPU의 시간을 sharing한다

Memory(single CPU)
page replacement등을 통해 메모리 공간을 Sharing한다.

Preemptive scheduler: 진행 중인 프로세스를 빼앗을 수 있다
그 안에서 또 work conserving과 none work conserving으로 나누는데, work conserving은 CPU idle time이 없도록 사용하는 것이다.

스케쥴링 알고리즘:
FIFO

  • 장점 : 심플하고 구현이 쉽다
  • 단점 : Convoy effect. Task의 상황을 고려 X 반응속도가 느려진다

SJF(shortest job first)
-빠른 Task부터 수행하기 때문에 response타임이 빠르다

  • starvation 현상이 일어날 수 있다

Roundrobin

  • response가 좋다
  • context switch 비용이 크다.

Paging Algorithm

  • LRU -> 실질적으로는 사용하지 않는다. 페이지 테이블에서 참조를 확인할 때 application이 메모리를 사용하는 것을 직접적으로 알 수 없기 때문에 interrupt를 통해 알려야 한다. 오버헤드가 매우 크다.
    따라서 Clock을 사용한다. 하드웨어적으로 비트를 이용하여 체크해서 page fault가 났을 경우에 이용 bit를 체크하여 페이지 교체를 진행한다.

0개의 댓글