pintos 강의
핀토스를 바꾸는 이유 -> 64비트 -> 32비트
- 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
- page fault
유저: 왜케 느려! -> 미리 한번해 -> 메모리에 미리 적재시켜 -> 사용자 체감 상승
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
-
- 속도 차이
-
- 휘발, 비휘발: 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의 결정체