리눅스의 역할
① 하드웨어 자원관리
② 어플리케이션 관리
하드웨어(컴퓨터)의 구성
- CPU, memory(RAM)m 디스크(DISK), 네트워크(NET)
□ Core 관리
■ Process Management(PM)
○ task_struct 단위로 관리
○ CFS 스케줄러: 한 프로세스가 CPU를 독점하지 않도록 한다
- vruntime(통계값) 최소값으로 선택함 => 우선순위 고려, starvation 방지
■ Memory Management(MM)
○ page 조각 단위(paging) // 4kb = 4096 = 0x1000 = 2^12 = 12bit
○ 가상메모리 메커니즘 / 버디시스템(기준으로 페이지를 할당 받음), 슬랩(커널전용, 4kb 한 조각을 밀도있게 사용하기 위해)
● mm_struct
: 중간관리 메커니즘으로 물리메모리를 직접적으로 사용하지 않고 가상메모리를 통해서 사용한다
사용시마다 매핑한다(후매핑, page fault 발생 시 매핑) → vma(stack), vma(heap), vma(text), ... // proc 밑에 maps 파일로 확인이 가능하다
● page table = VA-PA 변환(매핑) 테이블 : 후매핑 방식을 사용한다
**rss: 매핑된 양
■ 인터럽트: 네트워크, USB... (신호 보내서 처리시킴)
○ 타이머 인터럽트, 네트워크 인터럽트
→ 전반부(TH: Top Half, hard irq(hi)): 1~3개, 약 0.1% / 전반부에서는 굉장히 작은 역할을 한다
→ 후반부(BH: Bottom Half, soft irq(si)): 99.9% / 나중에 처리해도되는 커널함수를 뒤로 미루는 매커니즘 / 어플리케이션이 더 중요하기 때문에 나중에 처리해도 ㅇㅋ (workqueue → 전용프로세스 kworker / softirq, tasklet → ksoftirq)
■ 예외처리
○ syscall, pagefault 두 가지가 가장 대표적
● syscall: open, read, write
■ Locking 락
**위의 인터럽트와 예외처리를 묶어서 커널 진입점(entry)이라고 한다
: 이벤트 핸들링 방식// 평소 작동하지 않다가 인터럽트, 예외처리 발생시 작동함
□ I/O 관리
■ 네트워크
○ L4(TCP: 출발지포트, 목적지포트 번호), L3(IP, netfilter: iptables라는 명령어로 실행), L2(Device Drive: mac 주소 출발지, 목적지 / BPF, XDP) // OSI 7 Layer
○ 80(http), 443(https), 22(ssh) → nmap
■ 디스크
○ Virtual File System: cat /proc/version ← 명령어
○ File System: ext4(우분투, 데비안 계열), xfs(레드햇 계열), zfs, btrfs, f2fs(모바일), ...
● 역할: 어떤 파일 시스템 포맷을 사용하냐에 따라 디스크의 물리적인 블록을 어떻게 read, write 할지에 대한 규칙이나 전략(이러한 규칙이나 전략이 없으면 마운트가 불가능함)
○ Block: 몇 개의 블럭을 read, write 할건지 선택함
● 슈퍼블록(파일시스템 포맷에 대한 정보가 들어있음), inode블록, 데이터블록(가장 많이 차지)
■ 디바이스 드라이버: 센서, 블루투스, usb, 디스크 등 → 모듈 → insmod, rmmod, lsmod
□ 기타: 보안, 도구(tracing tool), 사운드, ...