읽기전에
SW사관학교 정글 pintOS과정에서 권영진 교수님이 강의해주신 내용을 필기한 기록입니다.
당시 ppt에 바로 필기하지 못해 키워드, 흐름 중심으로 기록하였습니다.
pintOS 수업을 중단한 이유
핀토스 수업내용을 바꾸는 이유:
32비트 -> 64비트로 변경하는 등(pintos-kaist) 큰 노력을 기울였으나 왜?
- chat gpt의 등장으로 인해 집단지성이 생겼다.
- 코드 가독을 해준다.
- 프로그램을 하나하나 이해하는게 맞나? 아닌거 같다.
- 코드를 같이 짜면서 생산성을 올리는게 목표였다.
- .ext binary 로딩하는 과정을 공부해두면 좋다.
- 프로그램 헤더 -> 모르겠다? 구글링을 해서 백그라운드를 채운다. + 챗gpt 활용
이제 어떻게 하느냐?
- 답을 다준다
- 이 input status를 입력하면 어떤 결과가 나오나? 오류가 생기나? 써봐라
- -> 코드를 이해할 수 있게 된다. (quiz 활용)
- 성능 competition -> 최적화 해보세요. (optimization problem)
- os prepatch
copilot + chatgpt 확실하게 활용하라
숙제 3배 -> 같이 써라.
chatgpt
내 코드를 던져봤을때 얘가 잘 이해하는지?
이렇게 질문하세요! -> 답이아니라 질문하는 조건
그림판
지식: 두가지로 크게 나뉜다
- 정의: OS knowledge
- 대충 넘긴다. chatgpt에게 물어봐!
- 산출물만 보고있다. -> three easy pieces
- Design knowledge: 만드는 과정 (Top down, 요구사항에 의해 만들어졌다.) 중요함!!!
- 왜 이렇게 만들었는지 추측, 원인 -> 이유를 알아야 한다.
process: 너무 무겁고 느리네? -> thread: light weight
OS의 탄생 이유: 하드웨어의 복잡한 기능들을 감춰준다.
- 어떻게 감추는지 모른다. 냅다 쓰는거다 (Abstraction 개념 적용)
- 인터페이스 아래에 동작원리를 이해한다.
What's going on
- 메모리 vs 캐시(SRAM)
- page fault
- copy on write, demand paging
유저: 왜케 느려! -> 미리 한번해 -> 메모리에 미리 적재시켜 -> 사용자 체감 상승
Abstraction
CS의 가장 중요한 개념
- 어떻게 abstract 할 것인가?
- top down- 목적이 있고, 맞춰서 발전한다.
내가 필요한 정보를 모아서 struct로 만들어 packing 한다.
OS의 인터페이스가 이쁘다! common set
john ouster out google
- composition: -> divide and conquer
- layers of Abstraction -> 거의 맞다 (리누스 토발즈)
- problem decomposition
- problem을 쪼개서
CPU, Memory, Disk -> Process
process는 computer를 추상화 한것이다.
its own view of Machine
address space vs virtual memory
- per 프로세스가 사용하고 있는 주소 : Own address space
- own virtual CPU: scheduling
- own files
disk에 있는 바이너리를 메모리로 올리는게 load
- 숙제: 언제 어디서, 어떻게 하는지 찾아봐라.
- heap, stack은 운영체제가 만들어준다.
- 어떤건 from disk, 어떤건 from os
- anonymous memory: stack, heap
Abstraction of address space
logical view: 실제하지 않는다. -> physical view
virtual addr vs physical addr
- mapping, association
- mapping function ex) 100(virtual) -> 1000(physical)
how to map virtual to physical: abstraction 방법(mapping)
- segmentation
- paging
- segmented paging
허용: translation to physical address
불가: exception (kernel code)
NULL 주소 접근 -> page fault 발생 (hardware) -> OS가 signal(SIGSEGV)을 보낸다. -> 프로세스가 segmentation fault를 출력하고 종료
가상 주소를 써도 통짜로 줬다 -> 많이 남는다 -> demand paging
어떻게? page fault -> 하드웨어(물리)) 신호 -> OS에게 권한이 간다. -> page fault handler
Demand paging
- 어플리케이션이 할당되지 않은 물리 메모리에 접근했을 때 -> app은 멈추고 커널로 권한이 넘어간다.
- page fault handler 수행 ->
process는 protection unit 이다.
file-backed and anonymous
- file -> memory에 매핑, page fault 발생 시 디스크에서 파일을 읽어와 적재
- DMA: without CPU
- 다 썼다 알려주기: interrupt
- 매핑 후 zero로 초기화
semantic : 의미의, 의미론의
design term: david wheeler
- level of indirection
- ex) pointer
- 주소에서 값으로 매핑한다. 포인터가 같은 공간을 가리킬 수 있다.
- Y = Ax , y 와 x는 서로 다른 레벨
- file이 disk를 추상화 한다.
- file offset
- virtual memory 주소 / file: offset
- physical memory 주소 / file block 주소
- FAT: table / ntfs: index
- 1. 속도 차이
- 2. 휘발, 비휘발: crash consistancy
- 이런것들을 해주는 소프트웨어 : file system
AI: 귀납적으로? 연역적으로? 빅데이터 추상화
볼수있는 틀이 생긴다.
Abstraction of storage
Indexing 기법
- indirect inode
- file allocation table
- extent tree
- b tree
- radix tree: 실무에서 짱좋다!
file의 메타데이타: inode
internal nodes in the index: 메모리, 스토리지 양쪽 다 있다.
명시적으로 저장을 할 때 allocation이 된다.
storage 내용을 dram에 캐싱한다.
내가 vi 에디터로 쓰면 캐시에 쓰는 것이다.
OS에서 배우는 걸 왜 필요해?
ex) 웹 서버: user를 connection으로 abstraction
현실에 대응되는 entity를 abstraction 한다.
OS는 abstraction의 결정체