본문 바로가기
운영체제

[OS] 프로세스와 운영체제 - 운영체제와 정보기술의 원리 4장(1/2)

by BeforB 2021. 11. 30.
728x90

 

 

반효경 교수님의 [운영체제와 정보기술의 원리] 4장 프로그램의 구조와 실행 중


이어지는 글(4장(2/2) - 인터럽트)

 

[OS] 운영체제와 정보기술의 원리 4장(2/2) - 인터럽트

반효경 교수님의 [운영체제와 정보기술의 원리] 4장 프로그램의 구조와 실행 중 [OS] 운영체제와 정보기술의 원리 4장(1/2) - 프로세스 반효경 교수님의 [운영체제와 정보기술의 원리] 4장 프로그램

beforb.tistory.com

 

 

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

프로그램이 CPU에서 명령을 수행하려면 해당 명령을 담은 주소 영역이 메모리에 적재되어 있어야 함.

즉, 프로그램이 실행된다 == 프로그램의 주소영역이 메모리에 올라가 있다

 

주소영역

코드 + 데이터 + 스택 영역으로 구분

 

코드(code) : 사용자가 작성한 함수의 코드가 CPU 내에서 수행될 수 있도록 기계어 명령 형태로 변환되어 저장됨

데이터(data) : 전역변수 등 프로그램이 사용하는 데이터를 저장

스택(stack) : 함수가 호출될 때 호출된 함수의 수행을 마치고 복귀할 주소와 데이터를 임시로 저장

 

출처-위키백과

 

 

 

인터럽트의 동작 원리

함수의 호출과 비슷함.

CPU가 프로그램 A를 수행하던 중 인터럽트가 발생할 경우, A에서 현재 수행 중인 명령 위치를 PCB(프로세스 제어 블록)에 저장 -> CPU는 인터럽트 처리 루틴으로 돌아가 인터럽트 처리 -> A로 돌아와 이전 수행 시점부터 재진행

 

이 때 각 함수호출에 필요한 복귀 주소는 각 프로그램의 주소공간 중 스택영역에 저장하고, 인터럽트가 발생한 경우에는 인터럽트 처리 후 복귀주소가 운영체제의 PCB에 저장된다.

 

 

 

 

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

CPU는 매 시점 메모리의 특정 주소에 존재하는 명령을 하나씩 읽어와 실행시킴. 일반적으로 조건문, 반복문, 함수호출 등에 의한 주소 이동이 없을 경우 순차적으로 명령을 수행.

 

이 때 CPU가 수행해야 할 메모리 주소를 담고 있는 레지스터프로그램 카운터(Program Counter: PC)라고 부른다.

 

 

컴퓨터 하드웨어의 구조

하드웨어 구조 - CPU, 메모리, 입출력 장치들

각 입출력 장치들의 CPU와 메모리 - 입출력 컨트롤러, 로컬버퍼

 

커널모드와 사용자모드

위에서 말했듯이, 컴퓨터는 CPU가 매순간 연산을 수행함으로써 동작한다. 이 때 CPU가 어떤 명령을 처리하고 있는지에 따라 커널모드와 사용자모드로 구분된다.

 

커널 모드

PC(프로그램 카운터)가 메모리에서 OS 영역을 가리킴 → OS 코드를 수행 중

 

사용자 모드

PC(프로그램 카운터)가 메모리에서 사용자 프로그램 영역을 가리킴 → 사용자 프로그램 코드를 수행 중

 

 

 

특권명령과 일반명령

3장에서 나온 CPU의 모드비트(mode bit)를 이용하여 두 명령을 구분

 

특권명령

보안이 필요한 명령.

반드시 운영체제만이 수행 가능.

ex) 입출력 장치, 타이머등 각종 장치에 접근하는 명령. 디스크 파일에 접근, 수행 결과 화면에 출력

 

일반명령

일반적인 사용자 프로그램이 수행하는 명령. ex) 메모리에서 자료를 읽어와서 CPU에서 연산하고 메모리에 쓰는 일반적 명령

 

 

시스템콜(System Call)

소프트웨어 인터럽트사용자 프로그램이 메모리나 입출력 장치에 접근하는 등 특권명령을 필요로 할 경우 직접 접근할 수 없으므로 CPU에 대행을 요청하는 것

OS는 커널 영역에 정의된 시스템 콜 처리 루틴을 수행.

 

인터럽트

주변 장치에서 CPU의 도움이 필요할 경우 인터럽트를 발생.

인터럽트 발생을 위해 CPU 옆의 인터럽트 라인을 세팅 → CPU는 매 명령 직후 인터럽트 라인을 체크 → 인터럽트 발생 시 현재 연산하던 것을 저장하고 인터럽트부터 수행

 

 

 

 

 

3. 프로그램의 실행

"프로그램이 실행 중이다."

== "디스크에 존재하던 실행 파일이 메모리에 적재됨"

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

 

일반적으로 실행파일이 메모리에 적재될 때 실행파일의 일부만을 메모리에 올리고 나머지는 디스크의 스왑영역에 올림.

(전체를 메모리에 올릴 경우 필요하지 않은 부분까지 올라가 메모리가 낭비될 수 있음)

 

프로세스(Process)

현재 수행 중인 프로그램

 

 

운영체제의 주소 공간

운영체제도 하나의 프로그램이므로 커널 역시 코드 + 데이터 + 스택 영역으로 구성

 

코드 영역 - CPU나 메모리 등 자원을 관리하기 위한 코드, 시스템 콜 및 인터럽트 처리

데이터 영역 - 현재 수행 중인 프로그램(프로세스)의 상태나 CPU 사용 정보, 메모리 사용 정보와 하드웨어 장치등의 각종 자원을 관리하기 위한 자료구조가 저장

스택 영역 - 함수 호출 시의 복귀 주소를 저장. 현재 수행 중인 프로세스마다 별도의 스택을 두어 관리함

 

※ 프로그램은 자기 자신의 코드 내에서 함수 호출이나 복귀 주소를 유지하기 위해서는 자기 주소 공간 내의 스택에 해당 정보를 저장하고, 프로그램 수행 중 입출력 요청과 같은 시스템 콜이나 인터럽트 등으로 인해 CPU가 OS 코드로 넘어갈 때는 CPU가 직전에 수행 중이던 커널의 스택 영역에 저장해서 사용.

인터럽트 후 복귀 주소는 스택이 아니라 PCB에 저장함.

 

 

 

 

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

프로그램이 사용하는 함수 종류

1) 사용자 정의 함수 - 프로그래머가 직접 작성한 함수

2) 라이브러리 함수 - 프로그래머가 직접 작성하지는 않았지만 누군가 작성한 함수를 호출하여 사용

     ex) sin() 함수

→ 사용자 정의 함수, 라이브러리 함수는 각 프로그램의 코드 영역에 기계어 명령 형태로 존재. 실행될 때 각 프로세스의 주소 공간에 포함됨.

    함수 호출 시에도 각 프로세스 주소 공간 안의 스택 영역을 사용

 

3) 커널 함수 - 운영체제 커널의 코드영역에 정의된 함수. 운영체제 내의 함수를 사용자 프로그램이 호출해서 사용.

     ex) printf() - 특권명령

 

 

커널 함수의 종류

시스템 콜 함수

사용자 프로그램이 입출력 요청과 같이 운영체제의 서비스를 요청하기 위해 호출하는 함수

운영체제는 입력 출력 시 운영체제 내의 read(), write() 함수를 이용

 

인터럽트 처리 함수

각종 하드웨어, 소프트웨어가 CPU의 서비스를 요청하기 위해 발생시키는 함수

 

 

 

 

 

 

728x90

댓글