• 격리(isolation)로부터 영감을 받음
메모리 isolation
CPU isolation
• 스레드(threads) + 주소공간(address space)
• 마치 하나의 가상 머신
• 실제 프로세스를 활용해 컨테이너 생성
• 프로세스는 자신이 CPU와 메모리를 소유하고 있다고 환상
• 서로 다른 프로세스에 영향 주지 않는다
• 모든 프로세스에 1개 이상 존재
• 상태를 가지고 실행되고 있는 프로그램
• 멈추고(스택에 저장) 재 실행(스택에서 CPU 레지스터로) 가능
• 다중 스레드간에는 주소 공간(address space)을 공유
• 주소 공간(Address Space)
• 프로세스 메모리 - code, variables, heap, stack
• 리눅스 커널 코드
mm_struct + page table
• 접근 제어
• 다른 프로세스
• CPU에는 MMU가 존재
• MMU는 모든 주소를 변환
• VA -> PA
• 페이지 테이블을 통해
• 모든 CPU는 주기적으로 "clock interrupt 또는 timer interrupt"를
제공
• 이를 통해 현재 프로세스를 강제로 세울 수 있음.
• 커널 모드에서 수행
• 필요 시 커널은 이 정보를 이용해서스레드간 스위칭 제공
• 혼자 도는 긴 프로그램과 잘 못 구현된 무한 루프 방지 가능
• CPU 레지스터
• 커널은 문맥 교환(context switch)시레지스터를 save/restore
User -> kernel (system call or timer)
Kernel -> context switch
Kernel -> user
• 프로그램이 어떻게 동작하는지 확인 필요
• 리눅스 프로세스 관리 수업은 trace-cmd/kernelshark 활용
• trace-cmd
• ftrace frontend
• 커널 트레이스 유틸리티
• kernelshark
• trace-cmd 결과물 분석 유틸리티
trace-cmd + kernelshark 설치
• sudo apt-get install trace-cmd
• sudo apt-get install kernelshark
• $ trace-cmd [...]
• record
• record a trace into a trace.dat file
• list
• the available events, plugins or options restore
sudo trace-cmd record -p function -l 'sched*' -e sched -e
irq ./toy_system
결과물 : trace.dat
이벤트 추가 syscalls
• sudo trace-cmd record -p function -l 'sched*' -e sched -e irq -e
syscalls sleep 10
• 크롬 또는 파이어폭스 실행
• 10초 후 자동 종료
• kernelshark로 분석
크롬 관련 프로세스가 굉장히 많이 나온다.
그 이유는 멀티 프로세스 아키텍처라고 한다.
멀티 프로세스 아키텍처에서는 각 탭이나 확장 프로그램, 플러그인 등이 독립적인 프로세스로 실행됩니다. 각각의 프로세스는 별도의 PID(Process ID)를 가지며, 이를 통해 운영체제에서 구분됩니다. 각 프로세스는 메모리 공간을 독립적으로 할당받아 동작하므로 하나의 탭에서 문제가 발생하더라도 다른 탭이나 브라우저 전체에 영향을 미치지 않는 장점이 있습니다.
따라서 크롬을 실행하면 브라우저 자체를 위한 "브라우저 프로세스"와 각 탭, 확장 프로그램, 플러그인을 위한 "렌더러 프로세스" 등 다양한 프로세스가 생성됩니다. 이로 인해 크롬 브라우저를 실행할 때 많은 수의 PID가 나타날 수 있습니다.
PID가 많아진다고 해서 반드시 성능에 악영향을 미치는 것은 아닙니다. 멀티 프로세스 아키텍처는 분리된 환경에서 각 프로세스가 작업을 처리하므로 크롬 브라우저가 더욱 안정적이고 빠르게 동작할 수 있습니다. (인터넷 검색)