리눅스데브코스 [10주차 - 1]<리눅스 프로세스 관리와 스케줄러 트레이스>

심우열·2023년 6월 5일
0

1. 공부해볼 것

  • 토이 프로젝트에 스케줄러 정책 적용
  • 스케줄러 트레이스 방법 습득
  • 첫 프로세스 생성/ 실행 코드 이해
  • 최초 시스템 콜 코드 이해
  • 커널 디버깅 방법 습득
  • 유저 레벨 스케줄러 이해
  • 프로세스 스케줄링
  • 멀티코어와 동기화
  • 전력관리 관련 내용

2. 응용프로그램이 OS에 요구하는 사항

  • 하드웨어를 더 편리하게 제어
  • 여러 응용 프로그램이 하드웨어를 동시에 사용
    -> 다중화(프로세스 스케쥴링)
  • 다른 응용 프로그램의 버그로 부터 보호
    -> 격리를 통해
  • 응용 프로그램간에 공유 가능
    -> 메모리 공유, 디스크 공유, 각종 디바이스 공유

3. 프로세스

  • 격리로부터 시작
    -> 메모리 격리
    -> CPU 격리
  • 스레드 + 주소 공간
  • 마치 하나의 가상 머신
    -> 실제 프로세스를 활용해 컨테이너를 생성
  • 프로세스는 자신이 CPU 와 메모리를 소유하고 있다고 생각
  • 서로 다른 프로세스에 영향을 주지 않음

1. 프로세스 스케줄러 트레이스

  • 프로그램이 어떻게 동작하는지 확인 필요
  • 리눅스 프로세스 관리 수업에서는 trace-cmd/kernelshark 활용
  • trace-cmd
    -> ftrace frotend
    -> 커널 트레이스 유틸리티
  • kernelshark]
    -> trace-cmd 결과물 분석 유틸리티

4. 스레드

  • 모든 프로세스에 1개 이상 존재
  • 상태를 가지고 실행되고 있는 프로그램
  • 멈추고(스택에 저장) 재실행(스택에서 CPU 레지스터로) 가능
  • 다중 스레드간에는 주소 공간을 공유

5. 메모리

1. 주소 공간(address Space)

  • 프로세스 메모리
    -> Core, variables, heap, stack
  • 리눅스 커널 코드
    -> mm_struct + page table

2. 접근 제어

-> 다른 프로세스

3. CPU에 MMU가 존재

  • MMU는 모든 주소를 변환
    -> VA(Virtual Address) -> PA(Physical Address)
    -> 페이지 테이블을 통해 변환

6. CPU

1. 모든 CPU는 주기적으로 'clock iuterrupt' 또는 'timer interrupt'를 제공

  • 이를 통해 현재 프로세스를 강제로 정지 가능
  • 커널 모드에서 수행
    -> 필요 시 커널은 이 정보를 이용해서 스레드간 스위칭 제공

2. 혼자 도는 긴 프로그램과 잘못 구현된 무한 루프 방지

3. CPU 레지스터

-> 커널은 문맥 교환(context switch)시 레지스터를 save/restore

profile
Dev Ops, "Git, Linux, Docker, Kubernetes, ansible, " .

0개의 댓글