만약에 4키로바이트 하드디스크의 원자 유닛
운영체제가 Crash consistency
를 해결 못해주면 application programmer가 해야하는데 이거 잘 안함. 그러나 너무 중요.
foo 를 bar로 업데이트해줄거면 foo 아니면 bar만 accept
Rollback logging
create(/a/log)
write(/a/log, "Foo")
write(/a/file, "Bar")
unlink(/a/log)
but
Possible cases
Fao
For
해결 방법 -> fsync
create(/a/log)
write(/a/log, "Foo")
fsync(/a/log)
write(/a/file, "Bar")
fsync(/a/file)
unlink(/a/log)
but still possible cases
Fao
For
but still problem
create하는 동시에 directory block(이것마저 디스크에 적어야하기때문에)
해결하기위해
디렉토리에 fsysnc를 하나 더 넣음
create(/a/log)
write(/a/log, "Foo")
fsync(/a/log)
fsync(/a/) ---> added one
write(/a/file, "Bar")
fsync(/a/file)
unlink(/a/log)
End of Abstraction stories
OS must regain control from app -> timer interrupt
Isolation 이라고 하는건
1. data read & write 를
2. control (내 코드로 다른 앱으로 점프 하면 안돼)
Isolation by protection domain = process
Isolation boundary -> process
memory abstraction -> virtual address space를 분리시킴으로써 isolation을 한다.
File은 Isolation을 permission system으로 함. 모든 메커니즘과 policy가 OS가 해줌. 권한 체크해주는 polocy에 해당되는 친구가 Reference monitor임
Web P 사이에 communication 할 수 있게 하는 것. IPC라고 한다.
IPC 기법에는 두가지가 있다.
같은 물리주소에서 어느 vm으로 가야한다고 알 수 있는 것이 cache coherence.
프로세스에서 다른 프로세스에게 값이 바뀌었다고 어떻게 알려줄 수 있는가? Signal. but it's slow. 그래서 쓰는게 Polling.
shared memory는 data copy가 안일어난다
msg passing 은 data copy가 일어난다
그래서
데이터가 작으면 카피 코스트가 적으니까 msg passing
데이터가 크면 shared memeory 쓴다
근데 일반적으로 편해서 데이터 커도 msg passing 쓴다
Annon : 최초 - 0으로 밀어 / swap된 page 가져오기
File backed : loading from file/binary
page eviction하는걸 page reclamation(?)이라고
page replacement policies
LRU 는 구현코스트가 너무 비쌈. 커널에 page fault 계속 내야해
Clock은 LRU를 approximates해서 사용한다.
근데 1번이 누군지는 몰라. 그렇지만 맨 뒤에가 누군지만 알면 되는거니까 ㄱㅊ