OS 강의 3주차

이진호·2022년 7월 3일
0

운영체제 이론

목록 보기
9/9

XV6 - OS 추천

투 트랙

  • 삼성, 엘지(직업 연속성 측면에서는 더 나을지도, 회사가 엄청 크기때문에 자신이 contribute 할 게 많이 없다)
  • 네카라쿠배(더 좋음, 살아남는건 자신의 몫, 그만큼 다이내믹)

자기계발이 중요하다 - 회사에서는 나를 대체 불가능한 사람으로 만들지 않음.
깃 허브 포트폴리오 - 코딩 실력을 검증하는 프로세스

  • 하드웨어, 어플리케이션(응용 프로그램), 웹, 클라우드 스택, 하드코어 OS(expert 존중 받음, 수가 적어서)

데브시스터즈???

hardware의 가장 심플한 특징들만 모아서 데이터 스트럭쳐를 만들어서 정의

protection mechanisms에서 Ring3에 있는 어플리케이션이 ring0에 있는 커널 영역을 건드리지 못하도록, mode bit로 관리

DPL -> previleged level

Isolation boundary

c1, c2 -> webserver 존재

프로세스를 따로 커넥션해야 독립이 됨. 쓰레드로 할 경우 프로텍션이 안됨 성능 향상 가능

file이 커널에 있는 같은 페이지 캐시?????ㅂㅁㅇㄴㄹㅇㄹ

shared memory -> shneget 명시적으로 프로세스 두 개가 같은 물리 메모리 주소를 가르키도록 설정하는 것

페이지테이블도 다 바꿔줘야하니까 비용이 비쌈 컨텍스트 스위칭

web server <-> php

둘은 독립해야하지만 커뮤니케이션 할 수 있어야 함. shared memory(메모리를 공유), message passing(pipe, domain-c sockd, fofo)

대용량 - shared memory
작은걸 빠르게 - message passing

Isolation of file

메타데이터에 퍼미션이 존재함 요청은 user가

chmod
chown

user가 설정하고 퍼미션 정보가 inode에 존재함

metadata(e.g. inode)

file을 여는건 반드시 시스템 콜을 통해 커널을 거쳐야 함

api를 허용해줄지 결정하는 reference monitor가 존재

어떤 프로세스껀지

file은 메타데이터의 퍼미션 정보가 있고 이건 유저가 요청을하고 파일을 열면 reference monitor(kernel module)가 권한이 있는지 검사함.

App Amore, SeLin?

퍼미션 정보를 어떻게 저장할건지는 DAC and MAC and capability-based

IPC (Shared(데이터를 다 썼으니 읽어도 됩니다라고 알려줘야 함, 세마포어 or poling 사용(레이턴시가 짧은 경우)), message passing)

Pipe: process A의 데이터를 Pipe(kernel buffer)에 카피하고 process B에 전달

프로세스 용 세마포어가 따로 있음. 스레드 용 세마포어랑 별개인듯

sharing

CPU: scheduling
DRAM: virtual memory - swap

fork - 새로운 프로세스를 만드는 시스템 콜

waiting state(I/O, sleep, yield(다음 best candidate를 찾을때까지 wait))

선점(반응성이 좋아야 하는 곳에 사용, 문맥전환때문에 성능이 떨어짐)
waiting -> ready
running -> waiting
running -> ready
new/waiting -> ready
exit

비선점(성능이 좋음, context switching이 적기 때문에)
running -> ready
running -> waiting
exit

fifo
단점 - 굉장히 긴 task에 의해 짧은 task가 막혀있는 현상(convoy effect)

SJF
장점 - very good response time
단점 - starvation 발생

round robin
단점 - turnaround time이 안좋음
pro - no starvation, good response time

다 개선한 것 mlfq

Paging review

anonymous page(stack이나 heap에서 사용하는 페이지)

page 교체 알고리즘
FIFO, Clock, LRU, optimal, Belady's anomaly(메모리 사이즈가 증가하더라도 페이지 폴트 수가 증가하지 않는다)

LRU - linked list를 만들어서 메모리 접근(read, write)이 발생하면 앞으로 보내고, eviction한다하면 맨 뒤에꺼를 뽑는다.
접근을 판단하려면 특정 참조 시점을 알아야하는데 그때 비용이 비쌈(page fault 발생시킴 매 순간마다, present bit를 꺼버려서). 웹 캐시는 가능한데 커널에서는 안됨.

하드웨어 지원을 통해 accessed bit를 이용하여 LRU에 근사할 수 있음

How to design OS

pintos(Monolithic Kernel, 커널의 모든 기능들이 하나의 커널 스페이스에서 실행됨)

Microkernel(커널의 기능을 최소화하고 file system과 memory manage와 같은 subsystem을 user-level로 올려버림)
단점 - 성능이 너무 안좋아짐 proc에서 커널거쳐서 fs갔다가 커널 거쳐서 driver 가서 이런식으로 성능면에서 너무 부족함.

control flow integrity

LLVM + IR(analysis)

pyrint

graphviz

  • Huge page - 2MB

  • Rust - webserver, safety가 보장되는 webserver
    안전성과 성능을 모두 잡은 웹서버

  • Web Assembly - 브라우저 플러그인?? 만드는거

key-value store

leveldb kv store - google에서 만든거
leveldb spdk

웹캐시나 데이터 스토리지를 key-value로 쓰는것??

redis - LRU part를 대체하는?? redis 성능을 향상시킨다. DB driver??

크롬 플러그인 개발????

-- Data structure를 무조건 알아야 함!
디버깅과 디펜시브, 인설션, 내 코드에 문제가 있을 때 얼마나 빨리 죽는지

코딩 실력 늘리는데 추천 해주실 것

  • exercism.org
  • leetcode
  • linux kernel Teaching
  • brendan gregg's
  • ebpf: kernel을 profile 해주는 툴

0개의 댓글