사용자와 하드웨어 사이 중개자 역할을 하는 시스템
→ Kernel, Shell, Utility 등의 프로그램으로 분할
운영체제의 핵심 프로그램
하드웨어 관리 (CPU, Memory, Disk 등)
유저 프로그램 지원 (프로세스 관리)
부팅 시 첫 번째로 로딩되어, 메모리에 상주 (Memory Resident)
오직 커널만 모든 메모리 영역에 접근 가능
: CPU의 명령 실행 모드 → 자원 보호를 위함!
커널 모드 : 자원 접근 & 모든 명령어 실행 가능
사용자 모드 : 자원 접근 불가 & 커널 영역의 코드 실행 불가
*System Call : 커널 모드로 전환하려는 요청
작업을 실행할 수 있는 파일
메모리에 올라와 실행중인 프로그램
(자원 할당 단위)
Foreground : 실행되어 사용자에게 보여지고 있는 상태
Background : 화면에 나타나지 않고 뒤에서 실행되고 있는 상태
∪
Daemon : 이벤트가 발생하거나 조건이 충족될 때까지 백그라운드로 실행
터미널로 사용자와 상호작용 불가
여러 프로세스가 빠르게 번갈아 가며 실행됨
→ 커널이 각 프로세스에게 CPU 시간 할당
프로세스는 여러 상태를 거치며 실행됨
각각 독립된 메모리 영역을
할당 받음
커널이 프로세스를 관리하기 위한 자료구조
→ 메모리 커널 영역에 저장됨
→ PID, 프로세스 상태, 레지스터값, CPU 스케쥴 정보,
메모리 정보, 사용한 파일과 입출력장치 정보 포함
CPU에서의 프로세스 실행 순서 변경 시
실행되던 프로세스의 중간 정보를 백업하고,
실행할 프로세스 문맥을 복구하는 과정
부모 프로세스의 실행 도중 자식 프로세스 생성 가능 (복사 fork 후 덮어쓰기 exec)
→ 프로세스 간의 책임 관계가 분명해져 시스템을 관리하기 수월
→ pstree 명령어로 확인 가능
*리눅스의 경우, systemd 가 커널에 의해 직접 생성된 프로세스 (pid=1)
프로세스를 이루는 실행 흐름 단위
(작업 단위 or CPU를 사용하는 최소 단위)
→ 시스템 자원을 효율적으로 관리하기 위함
→ 프로세스 당 최소 하나의 스레드를 가짐