Skip to content

Latest commit

 

History

History
50 lines (46 loc) · 4.07 KB

File metadata and controls

50 lines (46 loc) · 4.07 KB

프로그램 구조와 실행-1

1. 프로그램의 구조와 인터럽트

컴퓨터 프로그램은 어떤 언어로 작성되었든 내부 구조는 함수들로 구성된다. 프로그램이 CPU에서 명령을 수행하려면 해당 명령을 담은 프로그램의 주소 영역이 메모리에 올라가 있어야 한다.

프로그램 주소 영역

코드 영역

작성한 프로그램 함수들의 코드가 CPU에서 수행할 수 있는 기계어 명령(machine instruction) 형태로 저장되는 부분

데이터 영역

전역 변수(global variable) 등 프로그램이 사용하는 데이터를 저장하는 부분

스택 영역

함수가 호출될 때 호출된 함수의 수행을 마치고 복귀할 주소 및 데이터를 임시로 저장하는 데에 사용되는 공간

프로그램 실행 중 메인 함수가 다른 함수를 호출하면 CPU는 호출된 코드를 수행 후 원래의 함수 위치로 돌아와야 하는 지점을 스택에 저장한다. 이때 스택에 저장되 있는 복귀 주소를 사용하게 되는 것이다.


2. 컴퓨터 시스템의 작동 개요

컴퓨터의 CPU는 빠른 속도로 처리하는 계산 능력은 갖고 있지만, 일의 우선순위를 처리하는 능력은 갖고 있지 않아 매번 프로그램 카운터가 가르키는 메모리 위치의 명령을 처리하게 된다.

프로그램 카운터 (Program Counter:PC)

CPU가 수행해야 할 메모리를 담고 있는 주소

컴퓨터 시스템을 구성하는 하드웨어는 CPU와 메모리가 있고, 각 I/O 장치별로 존재하는 작은 CPU와 메모리를 각각 출력 컨트롤러와 로컬버퍼라고 부른다.

CPU의 커널모드

CPU가 프로그램 카운터가 가리키는 메모리 위치의 프로그램을 수행 중일 때

CPU의 사용자모드

사용자 프로그램이 존재하는 메모리 위치의 프로그램을 수행 중일 때

CPU가 수행하는 명령에는 일반명령특권명령이 있다.

일반명령

메모리에서 자료를 읽어와 CPU에서 계산하고 결과를 메모리에 쓰는 일련의 명령들

특권명령

보안이 필요한 명령으로 I/O 장치, 타이머 등 각종 장치에 접근하는 명령

시스템 콜

사용자 프로그램이 특권명령을 수행할 수 없을 때 특권명령의 대행을 요청하는 것

3. 프로그램의 실행

프로그램이 실행(program execution)한다는 것은

  1. 디스크에 존재하던 실행파일이 메모리에 적재
  2. 프로그램이 CPU를 할당받고 명령을 수행하고 있는 상태

프로세스의 주소 공간은 앞서 설명한 대로 주소 공간을 별도로 가지며 프로그램마다 독자적으로 존재하는 이와 같은 주소 공간을 가상메모리(vitual memory) 또는 논리적 메모리(logical memory)라 부른다. OS의 커널 역시 코드,데이터,스택의 주소 공간 구성을 가지고 있으며

커널의 코드

커널의 코드는 CPU, 메모리 등의 자원을 관리하기 위한 부분과 UI 제공을 위한 부분이 주로 이루고 있다. 

커널의 데이터

각종 자원을 관리하기 위한 자료구조뿐 아니라
프로세스(현재 수행 중인 프로그램)를 관리하기 위한 자료구조도 데이터 영역에 유지된다.

커널의 스택

함수호출 시의 복귀 주소를 저장하기 위한 용도이며 일반 프로그램의 스택과 달리 프로세스마다 별도의 스택을 두어 관리한다.

정리하자면 프로그램이 자기 자신의 코드 내에서 함수호출 및 복귀 주소를 유지하기 위해서는 자기 주소 공간 내의 스택을 사용하고, 시스템 콜이나 인터럽트 등으로 OS의 코드가 실행되는 중에 함수호출이 발생할 경우 커널 스택을 사용하게 되는 것이다. ※주의 프로그램 내의 함수호출 시 해당 프로그램의 스택에 복귀 주소를 저장하지만, CPU의 수행 주체가 OS로 바뀌는 순간에는 복귀 정보를 스택이 아닌 PCB에 저장한다.