Summary

[운영체제와 정보기술의 원리] 04장. 프로그램의 구조와 실행

프로그래민 2021. 12. 19. 23:00
반응형

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

프로그램이 CPU에서 명령을 수행하려면 해당 명령을 담은 프로그램의 주소 영역(코드, 데이터, 스택)이 메모리에 올라가 있어야 한다. 코드 영역은 작성한 프로그램 함수들의 코드가 CPU에서 수행할 수 있는 기계어 명령 형태로 변환되어 저장되는 부분이고, 데이터 영역은 전역 변수등 프로그램이 사용하는 데이터를 저장하는 부분이다. 스택 영역은 함수가 호출될 때 호출된 함수의 수행을 마치고 복귀할 주소 및 데이터를 임시로 저장하는 데에 사ㅣ용되는 공간이다.

프로그램은 메인함수에서 실행을 시작하고 다른 함수가 호출이 되면 그 위치로 점프해 그 함수를 실행하고 돌아오게 되는데 이때 돌아와야하는 지점을 스택에 저장한다. 인터럽트의 동작 원리도 함수의 호출과 비슷하다. 인터럽트가 발생하면 현재 수행중인 명령의 위치를 저장해놓고 인터럽트 처리루튼으로 넘어가서 인터럽트를 처리하고 복귀를 한다.

다만 함수호출의 경우 복귀할 위치가 스택에 저장되지만 인터럽트의 경우 돌아가 위치가 PCB에 저장된다. 

 

컴퓨터 시스템의 작동 개요

CPU가 수행해야 할 메모리 주소를 담고 있는 레지스터프로그램 카운터(Program Counter, PC)라고 한다. 즉, CPU는 매번 프로그램 카운터가 가리키는 메모리 위치의 명령을 처리하게 된다. 보통의 경우 순차적이다. 

컴퓨터 시스템의 하드웨어 구조 및 프로그램이 메모리에 적재되는 모습

메모리에는 사용자 프로그램들과 운영체제가 같이 올라가 수행된다. 이때 CPU는 프로그램 카운터가 가리키는 메모리 위치의 프로그램을 수행한다. PC가 운영체제를 가리키고 있으면 커널모드, PC가 프로그램을 가리키고 있으면 사용자모드 이다.

CPU가 수행하는 명령에는 메모리에서 자료를 읽어와 CPU에서 계산하고 결과를 메모리에 쓰는 일반명령과 보안이 필요한 명령으로 입출력 장치, 타이머등에 접근하는 특수명령이 있다. CPU내의 모드비트를 이용하여 시스템은 실행가능성을 체크한다. 다만 사용자 프로그램을 하다가 특수명령이 필요할때가 생기게 된다. 이때는 사용자 프로그램이 스스로 특수명령을 실행할 수 없기에 시스템 콜(System Call)이라는 서비스 요청을 하여 운영체제에게 대행을 요구한다. 

시스템 콜을 하게 되면 웅영체게는 사용자 프로그램의 코드가 아닌 커널 영역에 정의된 시스템 콜 처리 코드를 수행하게 된다. 외부 입출력을 예로 들면 시스템 콜을 이용해 디스크를 읽어오고 디스크 컨트롤러에서 인터럽트를 발생시켜 CPU에게 알리게 된다. CPU는 PC에 있는 명령을 처리하다 인터럽트 라인에 의해 인터럽트를 매 명령후 확인하고 인터럽트가 발생한 경우 처리하게 된다.

 

프로그램의 실행

프로그램이 실행되고 있다는 것디스크에 존재하던 실행파일이 메모리에 적재 되거나 프로그램이 CPU를 할당 받고 명령을 수행하고 있는 상태라는 것이다. 실행파일이 메모리에 적재될 때, 메모리에 한꺼번에 올라가기보단 일부만 올라가고 디스크의 스왑영역에 내려가있다. 

실행파일이 실해되어 물리적 메모리에 적재되는 모습

프로세스의 주소 공간은 코드, 데이터, 스택등으로 구성된다. 각 프로그램마다 이러한 주소공간을 별도로 가지고 이를 가상 메모리 또는 논리적 메모리라고 한다. 실제 물리적 메모리의 주소와 독립적으로 각 프로그램마다 독자적인 주소 공간을 가지기 때문이다. 

운영체제의 주소 공간 구조

운영체제의 커널 또한 코드, 데이터, 스택 공간을 가진다. 커널의 코드 영역 에는 CPU, 메모리 등의 자원을 관리 하기 위한 부분과 시스템 콜 및 인터럽트를 처리하는 부분을 포함한다. 커널의 데이터 영역에는 각종 자원(CPU, 메모리, 프로그램 등)을 관리하기 위한 자료구조가 저장된다. 이때 현재 수행중인 프로그램을 프로세스라고 하고, 커널의 데이터 영역에는 프로세스의 상태, CPU 사용 정보, 메모리 사용 정보 등을 가지는 PCB를 가지고 있다. 커널의 스택 영역에는 함수호출시 복귀 주소를 저장하기 위한 용도로 활용되지만 일반 프로그램의 스택과 다르게 현재 수행 중인 프로세스마다 별도의 스택을 두어 관리한다. 이는 시스템 콜 또는 인터럽트로 인해 CPU의 수행 주체가 운영체제로 바뀌는 순간을 대비하기 위한 프로세스마다의 스택 공간이다. 

 

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

사용자 프로그램은 사용자 정의함수라이브러리 함수, 커널함수 세가지를 사용한다. 사용자 정의함수는 프로그래머가 직접 작성한 함수이고,  라이브러리 함수는 누군가가 작성해놓은 함수를 호출하는 경우이다. 사용자 정의함수와 라이브러리 함수는 프로그램의 코드 영역에 기계어 형태로 존재한다. 따라서 프로세스의 주소 공간에 포함되며 함수 호출 시에도 자신의 주소공간의 스택을 사용하게 된다.

커널함수는 운영체제의 서비스를 요청하기 위해 호출하는 시스템 콜 함수와 각종 하드웨어, 소프트웨어, CPU의 서비스를 요청하기 위해 발생시키는 인터럽트 처리 함수가 있다. 운영체제의 커널의 내에 있는 함수를 사용자 프로그램이 호출해서 사용하는 것이다. 

 

인터럽트

CPU는 매번 프로그램 카운터가 가리키고 있는 지점의 명령을 하나씩 수행하고 나서, 다음 명령을 수행하기 직전에 인터럽트 라인이 세팅되어있는지 체크한다. 인터럽트 라인 체크를 통해 인터럽트가 발생했다면 CPU는 현재 수행중인 프로세스를 멈추고 CPU를 운영체제가 회수하여 인터럽트 처리루틴으로 이동하여 인터럽트 처리를 수행한다. 인터럽트의 처리를 마치고 나면 인터럽트가 발생하기 직전의 프로세스에게 CPU의 제어권이 다시 넘어간다.

하드웨어가 CPU에게 인터럽트를 전달하는 방법

인터럽트 처리 루틴중 인터럽트가 발생하면 중요도에 따라 인터럽트 처리를 수행하게 된다. 

 

시스템 콜

모든 프로그램은 자기 자신의 독자적인 주소 공간이 있고, 프로그램이 함수호출하는 경우 자신의 주소 공간에서 호출이 이루어진다. 하지만 시스템 콜은 함수호출이긴 하지만 커널의 주소 공간에 존재하는 함수를 호출 하는 것이다. 일반적인 함수는 자신의 스택에 복귀 주소를 저장하는 반면, 시스템 콜은 주소 공간 자체가 다른 곳으로 이동해야 함으로 프로그램 자신이 인터럽트 라인에 인터럽트를 세팅하는 명령을 내린다.

사용자 프로그램이 시스템 콜을 하는 방법

디스크를 예로들면 사용자 프로그램이 CPU 명령을 수행중 디스크의 파일을 읽어와야하는 경우 시스템 콜로 커널의 함수를 호출한다. 이때 사용자 프로그램이 인터럽트 라인을 셋팅하고 CPU는 이 인터럽트를 확인하고 CPU의 제어권을 운영체제로 이양하게 된다. 그런 다음 서비스 루틴으로 이동해 입출력 작업을 수행한다. 

다만 디스크 입출력 과정에서 CPU가 입출력의 완료만을 기다리는 것은 비효율 적이기 때문에 대부분의 운영체제는 입출력 요청을 한다음 CPU의 제어권을 다른 프로세스에게 이양한다. 다른 프로세스가 CPU에서 명령을 수행하던 중 입출려기 마무리 되면 디스크 컨트롤러가 CPU에게 하드웨어 인터럽트를 발생시켜 알려준다.

CPU를 할당 받은 프로그램이 중간에 CPU를 뺏기는 일은 크게 두가지가 있다. 하나는 타이머에 의한 인터럽트, 다른 하나는 입출력 요청을 위해 시스템 콜 하는 경우이다. 타이머는 특정 프로그램이 CPU를 독점 하는 것을 방지하기 위한 하드웨어이다.

 

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

 

사용자 모드와 커널 모드를 통해 프로그램이 수행되는 과정

프로세스는 수행을 완료하기까지 프로세스 자신의 주소공간에 있는 코드만 실행되는 것이 아니라 커널의 주소공간에 있는 코드도 실행된다. 자신의 주소 공간에 정의된 코드를 실행하는 것을 사용자 모드에서의 실행 상태라고 하고, 커널의 시스템 콜 함수를 실행하는 것을 커널모드에서의 실행 상태라고 한다. 다만 이를 통틀어 프로세스의 실행 상태라고 한다. 

 

 

출처
https://velog.io/@jehjong/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C%EC%99%80-%EC%A0%95%EB%B3%B4%EA%B8%B0%EC%88%A0%EC%9D%98-%EC%9B%90%EB%A6%AC-4%EC%9E%A5.-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8%EC%9D%98-%EA%B5%AC%EC%A1%B0%EC%99%80-%EC%8B%A4%ED%96%89
운영체제와 정보기술의 원리 - 이화여자대학교출판문화원 출판, 반효경 저
 

운영체제와 정보기술의 원리 - 교보문고

이 책은 총 10장으로 구성되어 있다.1장 ‘컴퓨터 및 정보기술의 역사’에서는 운영체제를 설명하기에 앞서 정보기술의 원리와 철학에 대해 정의하고, 컴퓨터와 정보기술 분야의 역사를 간략히

www.kyobobook.co.kr

반응형