- 토이 프로젝트에 스케줄러 정책 적용
- 스케줄러 트레이스 방법 습득
- 첫 프로세스 생성/ 실행 코드 이해
- 최초 시스템 콜 코드 이해
- 커널 디버깅 방법 습득
- 유저 레벨 스케줄러 이해
- 프로세스 스케줄링
- 멀티코어와 동기화
- 전력관리 관련 내용
- 하드웨어를 더 편리하게 제어
- 여러 응용 프로그램이 하드웨어를 동시에 사용
-> 다중화(프로세스 스케쥴링)- 다른 응용 프로그램의 버그로 부터 보호
-> 격리를 통해- 응용 프로그램간에 공유 가능
-> 메모리 공유, 디스크 공유, 각종 디바이스 공유
- 격리로부터 시작
-> 메모리 격리
-> CPU 격리- 스레드 + 주소 공간
- 마치 하나의 가상 머신
-> 실제 프로세스를 활용해 컨테이너를 생성- 프로세스는 자신이 CPU 와 메모리를 소유하고 있다고 생각
- 서로 다른 프로세스에 영향을 주지 않음
- 프로그램이 어떻게 동작하는지 확인 필요
- 리눅스 프로세스 관리 수업에서는 trace-cmd/kernelshark 활용
- trace-cmd
-> ftrace frotend
-> 커널 트레이스 유틸리티- kernelshark]
-> trace-cmd 결과물 분석 유틸리티
- 모든 프로세스에 1개 이상 존재
- 상태를 가지고 실행되고 있는 프로그램
- 멈추고(스택에 저장) 재실행(스택에서 CPU 레지스터로) 가능
- 다중 스레드간에는 주소 공간을 공유
- 프로세스 메모리
-> Core, variables, heap, stack- 리눅스 커널 코드
-> mm_struct + page table
-> 다른 프로세스
- MMU는 모든 주소를 변환
-> VA(Virtual Address) -> PA(Physical Address)
-> 페이지 테이블을 통해 변환
- 이를 통해 현재 프로세스를 강제로 정지 가능
- 커널 모드에서 수행
-> 필요 시 커널은 이 정보를 이용해서 스레드간 스위칭 제공2. 혼자 도는 긴 프로그램과 잘못 구현된 무한 루프 방지
-> 커널은 문맥 교환(context switch)시 레지스터를 save/restore