standford 버젼에서 바꾼 kaist 버젼으로 바꾼 이유
너무 코드들이 많아.
Computer science의 네 기둥
외국에서는 전산학과에서 70년부터 전필이 되었다.
OS 시스템 공부가 필요한 이유.
정석적인 답: 컴퓨터가 어떻게 동작하는지 이해하기 위해서.
on demand alocation
Mmap 은 가상메모리에 ~a만큼 쓰겠다고 선언
실제로 physically 확보해주진않는다
memset으로 값을 넣기 시작하면
OS 개괄적인 무슨일이 일어나는지는 알고 있어야한다.
중요한 차이는 백그라운드에서 어떻게 돌아가고있는지 알고있는데 개발자의 차이다.
운영체제에서 어떤 범위가
적어도 코드상에서 콜하는 함수들이 OS 단에서 어떻게 처리하고 하드웨어 단에서 어떤 메모리 위치에 있는지 캐시를 사용하는지 등등을 알아야한다.
그럼 실제로 프로그래밍을 할 때 도움이 된다.
운영체제를 어떻게 이해야하나. 디테일하나하나를 챙기진 말고 전체적인 프레임을 이해하는 법을 알려주고겠다.
운영체제를 이해하다보면 실무에서처럼 복잡한 프로그램 코드를 이해해가는 방법을 익히고 감을 잡을 수 있다.
page falut는 절대로 10배 차이가 날 수 없다.
운영체제는 왜 필요 할까.
탄생의 이유
providing application programming interface (API) to use hardware.
주 목적
하드웨어가 하는일을 숨기기.
운영체제의 3가지 주 역할
1. 추상화 (abstraction )
2. 방어 (protection & isolation)
3. 자원을 공유하기 (sharing resources)
peformance는 중요하지않다.
운영체제는 abstraction에서 시작해서 abs에서 끝난다.
abs란 key feature 로 하드웨어를 정의하기 .
사람을 위한 프로그램이기에 .
CPU -> virtualizing CPU (thread)
Memory -> Virtual address space
storage -> file
이걸 사용하는 API 들을 system call 이라고 부른다.
위의 추상화된 개념들을 사용하며
easy toprogram
management unit of execution
protection Unit of execution
기능을 갖춘
이 세가지 기능을 합쳐서 Process라고 하자 (executed application)
프로세스는 하나의 제한된 컴퓨터이다.
운영체제를 공부하는 것은 말그대로 전체적인 개념 혹은 큰 그림을 이해하는 방법 감을 이해하는 것이다.
OS에서 어떤 파트는 하드웨어가 하는지 어떤 파트는 소프트웨어가하는지 구분할 줄 알아야한다 알고 있어야한다.
OS
의 심장 page fault handler
운영체재는 암기과목이아니라 디자인 과목 즉 이해가 중요하다
어디까지는 운영체제가 해주고 어디부턴 프로그래머가 관리해야하는지 그 명확한 기준 선을 알아야한다.
abstraction of storage
stroage disk의 속도가 느리기에 dram에 cacheing을 하는데 이 아주 프로그래머에게 큰 문제를 일으키는데 바로 동기화 이슈이다. 같은 데이터가 두개의 다른 장소에 동시에 위치하기에 .
fysnc
Inode는(metadata)는 data와 매칭되게 OS가 보장해준다.
이 동기화는 리눅스 기준으로 ㄴ30초에 한번씩 일어난다.
그사이에 전원이 꺼지거나한다면 데이터가 동기화안되어있을 수있다.
atomicity 이는 잘 보장안된다. 이는 프로그래머가 보장해야한다.
Non-atomic update single block은 atomic update가 되지만 mulit block은 안된다 block = 4kb
atomicity 를 보장하는 방법이
crash consistency 이다. 생각보다 굉~장히 어렵다.
crash consistency example
1. Rollback logging
2. WAL
write aheaad logging
경우에 따라 속도가 다르다.
DB에 관심이 많다면 기본중 기본이다.