-
프로그램이 CPU에서 명령을 수행하려면 해당 명령을 담은 프로그램의 주소 영역이 메모리에 올라가 있어야 한다. 이때 프로그램의 주소 영역은
코드(code)
,데이터(data)
,스택(stack)
영역으로 구분된다. -
코드 영역
우리가 작성한 프로그램 함수들의 코드가 CPU에서 수행할 수 있는 기계어 명령(machine instruction) 형태로 변한되어 저장되는 부분 -
데이터 영역
전역 변수(global variable) 등 프로그램이 사용하는 데이터를 저장하는 부분 -
스택 영역
함수가 호출될 때 호출된 함수의 수행을 마치고 복귀할 주소 및 데이터를 임시로 저장하는 데 사용되는 공간 -
일반적으로 프로그램 내에서 발생되는 함수호출에 필요한 복귀 주소는 각 프로그램의 주소 공간 중
스택 영역
에 보관한다. 반면인터럽트
때문에 CPU를 빼앗긴 위치는 운영체제가 관리하는프로세스 제어블록
에 저장된다. => 인터럽트가 발생해 새로운 명령을 실행하면 기존의 레지스터값들이 지워지게 되므로 CPU 내의 상태를 PCB에 저장.
프로세스 제어블록(PCB)
각각의 프로그램마다 하나씩 존재
해당 프로그램의 어느부분이 실행 중이었는지를 저장
프로그램이 실행 중이던 코드의 메모리 주소, 레지스터값, 하드웨어 상태 등이 저장
-
CPU를 '컴퓨터의 두뇌'라고 부르지만 CPU는 인간의 뇌처럼 스스로 생각하고 판단하는 능력을 갖추고 있지는 못하다.
-
CPU는 매 시점 메모리의 특정 주소에 존재하는 명령을 하나씩 읽어와 그대로 실행할 뿐이다.
-
CPU가 수행해야 할 메모리 주소를 담고 있는 레지스터를
프로그램 카운터(Program Counter: PC)
라고 부른다. => CPU는 매번PC
가 가리키는 메모리 위치의 명령을 처리하며 조건문이나 반복문 등에 의한 주소 이동이 없는 이상 순차적인 수행이 이루어진다.
- 컴퓨터 시스템을 구성하는 하드웨어
- CPU
- 메모리
- 입출력 장치와 이들 장치를 전담하는 것
- 작은 CPU =
입출력 컨트롤러
- 메모리 =
로컬버퍼
- 작은 CPU =
-
PC
가 메모리 주소 중 운영체제가 존재하는부분을 가리키고 있다면 운영체제의 코드를 수행 중이며, 이 경우 CPU가 커널모드(kernel mode)에서 수행 중이라고 한다. -
반대로
PC
가 사용자 프로그램이 존재하는 메모리 위치를 가리키고 있다면, 사용자모드(user mode)에서 CPU가 수행되고 있다고 한다. -
CPU가 수행하는 명령에는
일반명령
과특권명령
이 있다.
- 모든 프로그램이 수해알 수 있는 명령
- 보안이 필요한 명령으로 입출력 장치, 타이머 등 각종 장치에 접근하는 명령
- 커널모드에서 운영체제에 의해서만 수행 가능
- CPU 내부에
모드비트
를 두어 감시 - 사용자 프로그램이 운영체제에게 특권명령을 요청하는 것 ->
시스템 콜
시스템 콜
사용자 프로그램이 운영체제 내부에 정의된 코드를 실행하고 싶을 때 운영체제에 서비스를 요청하는 방법으로트랩
이 발생해 CPU 제어권이 운영체제로 넘어간다.
-
프로그램이 실행(program execution)되고 있다
의 의미- 디스크에 존재하던 실행파일이 메모리에 적재된다.
- 프로그램이 CPU를 할당받고 명령을 수행하고 있는 상태
-
실행파일이 메모리에 적재될 때, 전체가 메모리에 올라가는 것이 아닌 당장 CPU의 수행에 필요한 부분은 메모리에 올리고, 그 외에는 메모리의 연장 공간으로 사용되는
스왑 영역
에 내려놓는 방식으로 운영된다. -
프로세스의 주소 공간은 앞서 설명한 대로
코드
,데이터
,스택
등으로 구성 -
프로그램마다 독자적으로 존재하는 이와 같은 주소 공간을
가상메모리(virtual memory)
또는논리적 메모리(logical memory)
라고 부른다.
-
운영체제 커널도
코드
,데이터
,스택
의 주소 공간 구성을 가지고 있다. -
커널의
코드
- 자원 관리를 위한 코드
- 시스템 콜 및 인터럽트 처리를 위한 코드
- 사용자에게 편리한 서비스 제공을 위한 코드
-
커널의
데이터
- 각종자원을 관리하기 위한 자료구조가 저장됨
프로세스
의 상태 => 현재 수행 중인 프로그램을 관리하기 위한 자료구조PCB
=> CPU 사용정보, 메모리 사용 정보 등을 유지하기 위한 자료구조
-
커널의
스택
-
함수호출시의 복귀 주소를 저장하기 위한 용도
- 프로세스가 자기 주소 영역 내부에 정의된 함수를 호출하면 자신의 스택에 복귀 주소 저장
- 프로세스가
시스템 콜
호출 -> CPU 제어권이 운영체제로 이양 -> 다른 함수를 호출하면 그 복귀 주소는커널 내
의 주소가 된다.
-
일반 사용자 프로그램의 스택과 일관성 유지를 위해 각 프로세스마다 커널 내에 별도의 스택을 두어 관리
-
시스템 콜이나 인터럽트 발생으로 CPU 제어권이 운영체제로 바뀌기 전에 수행되던 프로그램의 복귀 정보는 PCB에 저장된다.
-