서울대학교 컴퓨터공학과 김진수 교수님의 "고급 운영체제" 강의를 필기한 내용입니다.
다소 잘못된 내용과 구어적 표현 이 포함되어 있을 수 있습니다.
Computer systems
- DBMS 도 일종의 Computer system 이라고 할 수 있다.
- Application 의 측면이 있지만 이걸 사용하는 client application 이 있다는 점에서
- 요즘 연구 트렌드 상의 어려움…
- 단순한 PoC 의 레벨이 아닌 실 사용자의 시스템 입장에서 specialty 가 있다는 것을 보여줘야 하기 때문에 어려워지고 있댄다.
- 정말 많은 parameter 가 있기 때문에 항상 trade-off 가 있고 이것을 옳다고 명확하게 말할 수 있는 사람은 없기 때문
연구의 사이클
- 문제 정의
- 최신에 정의되고 해결된 문제를 더 잘 푸는 것을 강점으로 내세우거나
- 마찬가지로 그러한 문제에서 (맨 마지막에 future plan 등에서) 제기된 해결되지 못한 문제를 풀거나
- 물론 위 둘의 경우에는 경쟁자가 많다: 모두 똑같은 생각을 하고 있기 때문
- 새로운 문제를 정의 (e.g. 새로운 hw 출시에 따라 이것을 도입해 보는 것)
- 물론 이건 로또맞는거나 마찬가지인듯
- 이러한 새로운 문제를 발견하기에는 조상님이 잘 도와주지 않더라
- 다음과 같은 예시를 생각해 볼 수 있다.
- 메모리를 네트워크로 붙이는 CXL 이라는게 있는데
- 속도는 느리지만 bw 는 큰 메모리 이고
- 근데 속도가 느린 메모리를 위한 allocation policy 는 NUMA 라고 뭔가가 개발되어 있어서 이미 커널에 적용이 되어 있는데
- 그럼 CXL 의 경우에는 뭘 더 해줘야 성능 향상에 도움이 될지 연구해보는 등
- 물론 이건 로또맞는거나 마찬가지인듯
- 뭐 그 다음에는 “문제 해결 아이디어 정의” -> “디자인” -> “프로토타이핑” -> “측정” 의 과정을 거치는데
- 측정에서 뭔가 발전이 없으면 “분석” -> “최적화” -> 다시 “디자인” 으로 도르마무를 하는거다.
- 이렇게 수많은 사이클을 돌다 보면 둘중 하나의 결론이 난다: (1) 진짜 좋아지거나 (2) 포기하거나
문제를 파악하기 위해서는…
- 뻔한 얘기지만 다른 분야도 좀 파악하고 있어야 되니라
- 최신 기술들을 팔로우업하고있어라… 싱기방기 (MS 의 Project Silica, MS 의 DNA Storage)
- 다양한 사람과 소통하며 피드백을 받자.
- 미리 대비해놓기
- 아이디어가 생겼을 때 빨리 구현해볼 수 있도록
- 뭐 관련 코드 읽어보기 등
디자인
- 문제와 해결방법이 구체화 됐으면 디자인해보자
- Lampson’s hint (지난주에 준 논문) 에 이러한 디자인에 대한 방법론이 소개되어 있다.
- 기능 (Functionality): 내가 원하는 기능이 작동할까?
- 성능 (Speed): 속도가 빠르냐
- 신뢰성 (Fault-tolerance): 신뢰할만하냐
- End-to-end checking: 데이터를 주고 받을 때
chksm
같은 방법으로 데이터가 안깨졌는지 확인 - 네트워크 뿐 아니라 메모리에서 디스크로 내려보낼때 등
- End-to-end checking: 데이터를 주고 받을 때
- Policy vs Mechanism
- Policy (정책): (내)가 정한 “어떤” 것을 해야 하느냐: 바뀔 가능성이 있는 것
- Mechanism: Policy 를 구현하기 위해서는 “어떻게” 작동해야 되는가
- 뭐 이러한 예로 들면 쉬울 것 같다:
- RoundRobin 은 Policy 이고 이걸 위한 Timer interrupt 는 Mechanism 이다
- 이걸 구분짓는건 아주 중요: Policy 는 바뀔 가능성이 많기 때문에 이것만을 위한 Mechanism 을 만드는 건 비효율적이더라.
- 다양한 Policy 를 커버할 수 있는 Mechanism 을 만드는 것이 좋을것이야.
- 예를 들어서 Microkernel 은 기존의 monolithic kernel 의 fs, driver 같은거를 전부 다 때려박은 것과 다르게 policy-free 한 원초적인 것들만 구현해놓고 나머지 fs 같은건 전부 모듈식으로
- 이 경우에는 application 에서 필요로 하는 모듈을 직접 적재해서 성능을 향상시킬 수 있게 할 수도 있다.
- lustre 도 그쵸잉: lustre module 를 설치시에 적재
- Lampson’s hint (지난주에 준 논문) 에 이러한 디자인에 대한 방법론이 소개되어 있다.
연구의 차별점
- 이것도 뻔한 얘기지만 논문이라는 것은 이것을 왜했고 다른것들과 차이점은 뭔지 설득하는 과정이더라.
- “이미 많은데 왜 새로운 걸 들고왔는가”
- 어떻게 개선될 것이라는 것이라는 거를 (개선의 목표) 를 항상 생각하거라: 이런 생각 없이 고치기부터 하면 안된다 이거야.
- 뭐 더 좋게 하기 위한 방법들을 계속 생각
여기부터는
2024-03-12
강의
Evaluation
- System 쪽은 실제로 만들고, 또 이것을 evaluation 하는 것을 중요하게 생각한다.
- Network 쪽에서는 수학적 모델을 만들어서 하기도 하지만 system 쪽은 parameter 가 너무 많아 힘들다.
- Analytical investigations - 분석 모델 사용
- 근데 위에서 말한 것 처럼 파라미터가 엄청 많기 때문에 아무래도 이것들로 공격이 들어올 때 잘 정당화 해야 된다.
- Simulation 사용
- 실제 시스템에서의 trace 나 log 들을 이용
- 프로토타입을 만들거나 기존의 시스템을 고치는 것은 아무래도 힘들다고 한다.
- 아니면 과학에서 사용하는 것처럼 가설 -> 검증 -> 수정 과정을 반복할 수도 있다.
Research paper
- 논문을 읽을 때는 논문 발표 ppt 에 잘 정리되어 있으니까 계속 읽어보면서 참고하자.
- 핵심은 논문의 흐름, 스토리가 자연스럽게 이어져야 한다.
- 논문들을 많이 읽어보기
- (교수님 추천) intro 까지 읽어보고 (여기 제시된 문제를 참고해서) 나라면 어떻게 했을까? 어떻게 해결했을까 생각해보는 것도 나쁘지 않다.
Evaluation criteria
- 최신의 논문을 개선한 것이라면 그거랑 비교하면 되니까 별 문제가 없지만
- 문제를 새로 발견했다던가 기존의 문제를 좀 변형시킨 경우에는 결과를 비교할 만한 것이 부족할 수도 있다.
- “Novelty 가 없다” 라는 말의 의미는
- “기존 논문에 비교해 새로울게 없다” 라는 의미가 아니고
- “기존 논문이 있든 없든 그 분야의 사람들이 쉽게 생각해낼 수 있는 것이다” 라는 의미이다.
- Naive solution
- 문제에 대해
- 아직 적용한 사람은 없지만, 쉽게 생각할 수 있는 해결책(예를 들면 다른 분야에서 유사한 문제를 푼 방식)을 적용해 해결했다면 이것은 naive 한 해결책이다
- 여기에다가 플러스 알파를 더 넣어야 진짜 specialty 가 있는 것