4장 - 프로그램의 구조와 실행

Jimin·2022년 10월 2일
0

운영체제

목록 보기
6/9
post-thumbnail

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

프로그램이 CPU에서 명령을 수행하려면 해당 명령을 담은 프로그램의 주소 영역이 메모리에 올라가 있어야 한다.

프로그램의 주소 영역은 크게 세가지 영역으로 구분된다.

  • 코드(code)
  • 데이터(data)
  • 스택(stack)

코드 영역

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

데이터 영역

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

스택

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

프로세스 제어블록

인터럽트 때문에 CPU를 빼앗긴 위치는 운영체제가 관리하는 프로세스 제어블록에 저장된다.
프로세스 제어블록에는 인터럽트가 발생한 시점에서 그 프로그램의 어느 부분까지 수행했는지를 저장한다.


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

CPU

  • 빠른 속도로 처리하는 계산 능력 O
  • 스스로 결정하는 능력 X
  • 매 시점 메모리의 특정 주소에 존재하는 명령을 하나씩 읽어와 그대로 실행

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

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

CPU는 매번 프로그램 카운터가 가리키는 메모리 위치의 명령을 처리하게 된다.

컴퓨터 시스템을 구성하는 하드웨어로는 두 가지가 있다.

  • CPU
  • 메모리

각 입출력 장치와 이들 장치를 전담하는 작은 CPU(출력 컨트롤러)와 메모리(로컬버퍼)


3. 프로그램의 실행

프로그램이 실행(program execution)되고 있다 의 두가지 중요한 의미

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

가상메모리/논리적메모리

프로세스의 주소 공간은 앞서 설명한대로 코드, 데이터, 스택 등으로 구성되는데 각각의 프로그램마다 이러한 주소 공간을 별도로 가지는데, 프로그램마다 독자적으로 존재하는 이와 같은 주소 공간

운영체제

운영체제도 하나의 프로그램이므로 운영체제 커널 역시 코드, 데이터, 스택의 주소 공간 구성을 가지고 있다.

운영체제의 기능

  1. 아랫단의 하드웨어 자원을 효율적으로 관리하는 것
  2. 윗단의 응용프로그램 및 사용자에게 편리한 서비스를 제공하는 것

4. 사용자 프로그램이 사용하는 함수

사용자 정의함수

프로그래머 본인이 직접 작성한 함수

라이브러리 함수

프로그래머 본인이 직접 작성하지는 않았지만 이미 누군가 작성해놓은 함수를 호출만 하여 사용하는 경우

사용자 정의함수와 라이브러리 함수는 모두 그 프로그램의 코드 영역에 기계어 명령 형태로 존재한다.
따라서 이 두 함수는 프로그램이 실행될 때 해당 프로세스의 주소 공간에 포함되며,
함수 호출 시에도 자신의 주소 공간에 있는 스택을 사용한다.

커널 함수

운영체제 커널의 코드에 정의된 함수

커널함수의 종류

  • 시스템 콜 함수
    운영체제의 서비스를 요청하기 위해 호출하는 함수
  • 인터럽트 처리함수
    하드웨어 및 소프트웨어가 CPU의 서비스를 요청하기 위해 발생시키는 함수

커널함수는 사용자 프로그램의 주소 공간에 그 코드가 존재하는 것이 아니라 운영체제 커널의 주소 공간에 코드가 정의된다.
⇒ 즉, 운영체제 내에 있는 함수를 사용자 프로그램이 호출해서 사용하는 것이다.

일반적인 함수 호출 VS. 시스템 콜

일반적인 함수 호출
사용자 프로그램 내에 존재하는 코드 실행

시스템 콜
사용자 프로그램이 아닌 운영체제라는 별개의 프로그램에 CPU를 넘겨서 실행


5. 인터럽트

CPU는 매번 프로그램 카운터가 가르키는 곳에 있는 명령을 수행하는 일밖에 하지 않기 때문에, 현재 수행 중인 프로세스로부터 CPU를 회수해 CPU가 다른 일을 수행하도록 하기 위해서는 인터럽트 메커니즘이 필요하다.

인터럽트마다 중요도가 다르기 때문에 상대적으로 낮은 중요도를 가진 인터럽트를 처리하는 도중에 중요도가 더 높은 인터럽트가 발생하는 것을 허락할 필요가 있다.


6. 시스템 콜

모든 프로그램은 자기 자신의 독자적인 주소 공간을 가지고 있으며,
프로그램이 함수호출을 하는 경우 자신의 주소 공간 내에서 호출이 이루어지게 된다.

시스템 콜은 비록 함수 호출이기는 하지만 자신의 주소 공간을 거스르는 영역에 존재하는 함수를 호출한다.

프로그램이 CPU를 할당받고 명령을 수행하다가 중간에 CPU를 빼앗기는 경우는 크게 두 가지가 있다.

  1. 타이머에 의해 인터럽트가 발생하는 경우
  2. 입출력 요청을 위해 시스템 콜을 하는 경우

타이머

특정 프로그램에 의해 CPU가 독점되는 것을 방지하기 위한 하드웨어로,
CPU 할당 시간이 만료되면 인터럽트를 발생시킨다.
시분할 시스템의 구현을 위한 필수적인 요소이다.


7. 프로세스의 두 가지 실행상태

사용자모드에서의 실행상태 (user mode running)

자신의 주소 공간에 정의된 코드를 실행하는 것

커널모드에서의 실행상태 (kernel mode running)

시스템 콜 함수를 실행하는 것

profile
https://github.com/Dingadung

0개의 댓글