프로그램이 실행되고 있다
'프로그램이 실행되고 있다'는 것은 컴퓨터 시스템 차원에서 볼 때 크게 두 가지 중요한 의미를 가진다.
- 디스크에 존재하던 실행파일(.exe)이 메모리에 적재(load)된다는 의미
- 프로그램이 CPU를 할당받고 명령을 수행하고 있는 상태
일단 우리가 알고 있는 작동은 CPU는 디스크에 존재하는 실행파일이 메모리에 올라가면 프로그램은 CPU를 할당받고 명령을 수행한다. 하지만 여러 프로그램이 짧은 시간 단위로 CPU를 나눠 쓰고, 이들 프로그램이 메모리에 동시에 적재되어 있을 수 있으므로 여러 프로그램이 동시에 실행된다는 말을 보편적으로 사용하는 것이다.
실행파일이 메모리에 적재될 때
실행파일 전체가 메모리에 한꺼번에 올라가기 보다는 일부분만 메모리에 올라가고 나머지는 디스크의 특정 영역으로 내려가는 것.
프로세스의 주소 공간은 코드, 데이터, 스택 등으로 구성된다. 각각의 프로그램마다 이러한 주소 공간을 별도로 가지며 이와 같은 주소 공간을 우리는 가상 메모리(Virtual Memory) 또는 논리적 메모리(Logical Memory)라고 한다.
가상 메모리, 논리적 메모리
프로그램마다 독자적으로 가지고 있는 주소 공간
운영체제 또한 하나의 프로그램이기 때문에 운영체제 커널 역시 코드, 데이터, 스택의 주소 공간 구성을 가지고 있다. 즉 운영체제 또한 가상 메모리가 존재한다.
운영체제 역할
아랫단의 하드웨어들을 효율적으로 관리하는 것
윗단의 프로그램과 사용자에게 편리한 서비스를 제공하는 것
운영체제 커널의 구성
운영체제의 커널은 항상 메모리에 상주한다.
코드
- CPU, 메모리 등의 자원을 관리하기 위한 부분과 사용자에게 편리한 인터페이스를 제공
- 시스템 콜 및 인터럽트를 처리
데이터
- 각종 자원을 관리하기 위한 자료구조 저장
- CPU나 메모리와 같은 하드웨어 자원 뿐만 아니라 현재 수행 중인 프로그램을 관리하기 위한 자료구조
- 각 프로세스의 상태, CPU 사용 정보, 메모리 사용정보 등을 유지하기 위한 자료구조인 PCB(Process Control Block)를 두고 있다.
스택
- 일반 프로그램의 스택 영역과 마찬가지로 함수 호출시의 복귀 주소를 저장하기 위한 용도로 사용
- 현재 수행중인 프로세스마다 별도의 스택을 두어 관리
프로세스마다 커널 내에 별도의 스택 공간이 필요한 이유
- 프로세스가 함수를 호출할 때 자기 주소 영역 내부에 정의된 함수를 호출하면 자신의 스택에 복귀 주소를 저장하지만, 프로세스가 특권명령을 수행하려고 커널에 정의된 시스템 콜을 호출하고 시스템 콜 내부에서 다른 함수를 호출하는 경우 그 복귀 주소는 커널 내부의 주소가 되어 사용자 프로그램의 스택과는 별도의 저장공간이 필요
- 커널은 일종의 공유 코드로서 모든 사용자 프로그램이 시스템 콜을 통해 커널의 함수를 접근할 수 있으며, 일관성을 유지하기 위해 각 프로세스마다 커널 내에 별도의 스택을 두고 있음.
자기 주소 공간 내의 스택을 사용하는 경우
자기 자신의 코드 내에서 함수호출 및 복귀 주소를 유지
커널 스택을 사용하는 경우
시스템 콜이나 인터럽트 등으로 운영체제의 코드가 실행되는 중에 함수 호출이 발생하는 경우
짚고 넘어갈 점
- 시스템 콜이나 인터럽트 발생으로 CPU의 수행 주체가 운영체제로 바뀌는 순간에는 직전에 수행되던 프로세스 복귀 정보를 스택이 아닌 PCB에 저장한다.
- 위의 커널 스택을 사용하는 경우와 명확히 다르다. 이미 인터럽트가 발생한 후 또 한 번 운영체제의 코드가 실행될 때는 커널 스택을 사용
- 인터럽트 발생 -> PCB에 저장 -> 커널 스택
출처
'프로그래밍 > 운영체제' 카테고리의 다른 글
스레드(Thread)란 (6) | 2023.07.31 |
---|---|
프로세스 제어 블록 (PCB, Process Control Block)란? (8) | 2023.07.20 |
데이터 전송 명령어(data transfer instruction) 정리 (6) | 2023.06.30 |
데이터 전송 명령이란? (12) | 2023.06.28 |
유저 모드와 커널 모드 (6) | 2023.06.27 |
댓글