프로그램
메모리
에 로드되면 프로세스가 된다.💡 프로세스 vs 프로그램
프로그램은 수동 엔티티이고, 프로세스는 액티브 엔티티이다. 즉, 프로그램은 명령들을 모아놓은 디스크의 파일인 반면, 프로세스는 이러한 명령에 대한 프로그램 카운터를 가진다.
커널은 기억장치
(디스크)에서 실행파일
(.exe)를 가져오고 이를 메인 메모리
에 할당한다. 이것이 프로세스 생성이다.
이때, 독자적인 메모리 주소 공간이 형성(Code, Data, Stack)이 일어난다.
PCB
가 생성되며 OS가 실행한 프로그램의 코드를 읽어들여 프로세스에 할당된 메모리의 Text segment에 저장한다.
Code
, Data
, Stack
영역을 생성한다.
PCB
에 여러 정보가 기록되면 CPU를 할당받기까지 대기한다.
💡 프로세스 제어 블록(PCB)
운영체제가 각 프로세스를 관리하기 위해 프로세스 별로 보유하고 있는 자신의 정보 묶음.
💡 커널
운영 체제의 핵심이 되는 프로그램으로, 운영 체제의 기능을 제공하는 중요한 소프트웨어 구성 요소이다.
- 운영 체제의 하드웨어 추상화와 자원 관리를 담당하며, 시스템의 안정성과 보안을 유지하면서 여러 프로세스가 동시에 실행될 수 있도록 관리한다.
💡 프로세스 문맥(Process Context)
- 프로세스의 특정 시점의 상태를 표현하는 정보
하드웨어 문맥으로는프로그램 카운터(PC)
, 각종레지스터
가 있으며 이들을 활용하여 해당 프로세스가 어디까지 실행되었는지 알 수 있다- 프로세스의 주소 공간도 문맥에 포함되며, 프로세스 관련 커널 자료구조인 PCB(Process Control Block)와 프로세스 커널 스택도 포함된다.
앞서 말했듯이 프로세스는 생성되면서 독립적인 주소 공간을 가지게 된다.
함수의 호출과 관계되는 복귀할 주소 및 데이터(지역변수, 매개변수, 리턴값 등)를 임시로 저장하는 영역이다.
💡 Stack Overflow
재귀 함수가 너무 깊게 호출되거나 함수가 지역변수를 너무 많이 가지고 있어 이러한 스택 영역을 초과하면 발생하는 에러이다.
런타임에 크기가 결정되는 영역이다. 사용자에 의해 공간이 동적으로 할당 및 해제된다.
전역 변수나 Static 변수 등 프로그램이 사용할 수 있는 데이터를 저장하는 영역이다.
BSS(Block Stated Symbol)
- 초기값 없는 전역변수, 배열, 정적 변수가 저장되는 영역
- 초기화 된 데이터는 Data 영역에 저장되고 초기화 되지 않은 데이터는 BSS 영역에 저장됨
- 초기화되지 않은 변수는 프로그램이 실행될 때 영역만 잡아주면 되기 때문
프로그램이 실행될 수 있도록 CPU가 해석 가능한 기계어 코드가 저장되어 있는 영역이다.
앞서 말했듯 프로세스는 실행중인 프로그램이며, 커널은 이를 관리하는 운영체제의 핵심 영역이다. 하지만, 이런 커널 또한 메모리에 상주하는 부분이기 때문에 별도의 메모리 영역(code, data, stack)이 존재한다.
CPU, 메모리 등의 효율적으로 자원을 관리하기 위한 부분
운영체제가 사용하는 여러 자료구조 정의하는 부분
각 프로세스의 커널 스택이 존재하는 영역
💡 특권 명령
커널과 같은 시스템의 핵심 부분에서만 실행될 수 있는 명령으로 메모리 보호 관리, 입출력 처리 등 시스템의 보안과 안전성을 위반할 수 있는 명령이다.
- 운영체제는 이런 특권 명령을 수행할 수 있는 커널 영역과 일반 프로그램이 실행되는 유저 영역을 나누어 관리한다.
💡 유저모드와 커널 모드
- 실제 어플리케이션이 실행될 때는 유저모드
- 커널모드는 보안과 전체 시스템을 해칠 수 있는 특권 명령을 지니고 있으므로 유저가 접근 불가.
- 커널모드의 기능이 필요할 경우 시스템 콜 사용
- 커널모드에 더 높은 권한을 줘 유저 어플리케이션이 함부로 운영체제의 치명적인 데이터를 수정하거나 삭제하지 못하게 한다.
- 시스템 전체의 안전성을 보장
- 유저 모드에서 실행되는 경우 하드웨어가 운영체제에 오류임을 알리게 됨