Skip to content

Latest commit

 

History

History
71 lines (38 loc) · 5.44 KB

File metadata and controls

71 lines (38 loc) · 5.44 KB

4장 프로그램 구조와 실행

1. 프로그램의 주고와 인터럽트

컴퓨터 프로그램은 프로그래밍 언어가 달라도 내부구조는 함수들로 구성

함수 진행 중 다른 함수를 호출하고, 수행이 끝나면 원래 호출한 위치로 돌아가 계속 실행

프로그램이 CPU에서 명령을 수행하려면 메모리에 올라가 있어야 하는데, 프로그램의 주소 영역은 크게 코드(Code), 데이터(Data), 스택(Stack) 영역으로 구분

코드 영역은 프로그램 함수들의 코드가 기계어 명령(Machine Instruction) 형태로 변환되어 저장

데이터 영역은 전역 변수(Global Variable)등 프로그램이 사용하는 데이터를 저장하는 부분

스택 영역은 함수가 호출될 때 호출된 함수의 수행을 마치고 복귀할 주소 및 데이터 임시 저장 공간

프로그램은 맨 먼저 메인함수에서 실행을 시작해 다른 함수를 호출하면 CPU가 메인함수 코드를 수행하다 다른 함수의 코드로 이동, 완료 후 원래 호출 위치로 돌아오는데 돌아와야 하는 지점을 스택에 저장하는 것

인터럽트의 동작 원리도 함수의 호출과 비슷하다. 프로그램이 CPU를 할당받아 수행하던 중 인터럽트가 발생하면 프로그램의 현재 수행 명령의 위치를 저장한다. 그 후 운영체제의 인터럽트 처리루틴으로 넘어가 인터럽트 처리 후 다시 돌아와 이전 작업 시점부터 수행

일반적으로 프로그램 내에서 발생되는 함수 호출에 필요한 복귀 주소는 각 프로그램의 주소 공간 중 스택 영역에 보관

인터럽트 때문에 CPU를 빼앗긴 위치는 운영체제가 관리하는 프로세스 제어블록에 저장

프로세스 제어블록에는 인터럽트가 발생한 시점에서 그 프로그램의 어느 부분까지 수행했는지를 저장, 인터럽트 처리 후 프로세스 제어블록에 저장된 주소를 복윈시켜 수행 재개

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

CPU는 매 시점 메모리의 특정 주소의 명령을 하나씩 읽어와 그대로 실행하는데, CPU가 수행해야 할 메모리 주소를 담고 있는 레지스터를 **프로그램 카운터(Program Counter: PC)**라 함.

CPU는 프로그램 카운터가 가리키는 메모리 위치의 명령을 처리하는데 조건문이나 반복문, 함수 호출 등에 의한 주소 이동이 없는 이상 항상 바로 다음 명령을 가리키며 코드를 순차적으로 진행함.

컴퓨터 시스템 구성하는 하드웨어 : CPU, 메모리, 입출력 장치, 장치별 작은 CPU(컨트롤러) 및 메모리(로컬버퍼)

CPU가 수행하는 명령

  • 일반명령 : 메모리에서 자료를 읽어 CPU에서 계산 후 결과를 메모이에 쓰는 일련의 명령, 모든 프로그램이 실행 가능
  • 특권명령 : 보안이 필요한 명령(출력 장치, 타이머 등 각종 장치에 접근하는 명령), 운영체제만 수행 가능하도록 제한.

→ 컴퓨터 시스템은 두 명령의 실행가능성 체크를 위해 CPU내에 모드비트를 둠.

시스템 콜 : 사용자 프로그램이 특권명령을 수행해야 할 경우 시스템 콜을 통해 운영체제에게 명령 수행을 대행시킴. 운영체제가 CPU로 작업하고 작업완료 시 인터럽트를발생시켜 완료를 통지해 알리고, 사용자 프로그램으로 복귀함.

인터럽트 라인(Interrupt Line)

  • CPU는 프로그램의 카운터가 가리키는 메모리 위치의 명령만 수행하기 때문에 주병장치가 CPU의 도움이 필요한 경우 발생시키는 인터럽트를 인터럽트 라인에 세팅함.
  • CPU는 매번 명령 수행 후 인터럽트 라인을 체크해 서비스 요청 여부를 확인함.
  • 인터럽트의 종류가 다양해 각 발생 원인마다 라인을 다르게 구분함.
  • 인터럽트 발생 시 CPU는 해당 인터럽트 처리루틴으로 넘어가 커널 내 인터럽트 처리 코드 수행함.

3. 프로그램의 실행

프로그램이 실행 되고 있다.

  1. 디스크에 존재하던 실행 파일이 메오리에 적재

  2. 프로그램이 CPU를 할당 받고 명령을 수행하는 상태

실행파일이 메모리에 적재 된 때 일부분만 올라가고 나머지는 특정 영역에 내려가 있는게 일반적이며 효율적으로 사용하는 방법

각각의 프로그램 마다 프로세스의 주소 공간(코드, 데이터, 스택)을 별도로 가지며 이러한 주소 공간을 가상메모리 또는 논리적 메모리라고 부름. 이는 물리적 메모리 주소와 독립적으로 가짐.

운영체제의 커널도 코드, 데이터, 스택의 주소 공간 구성을 가짐. 코드는 CPU, 메모리 등의 자원 관리를 위한 부분과 인터페이스 제공을 위한 부분이 주로 이루어짐.

운영체제의 데이터는 CPU, 메모리와 같은 하드웨어 자원 관리를 위한 자료구조뿐만 아니라 현재 수행중인 프로그램(프로세스)을 관리하기 위한 자료주고도 커널의 데이터 영역에 유지됨.

커널의 데이터 영역 : PCB(각 프로세스의 상태, CPU사용 정보, 메모리 사용 정보 등을 유지하기 위한 자료구조)

커널의 스택 영역 : 함수호출 시의 복귀 주소 저장(수행 중인 프로레스마다 별도의 스택으로 관리)

→시스템 콜, 인터럽트 발생 등은 복귀정보를 스택이 아닌 PCB에 저장함.