[운영체제 스터디]4장-프로그램의 구조와 실행
1. 프로그램의 구조와 인터럽트
프로그램이 cpu에서 명령을 수행하려면 해당 명령을 담은 프로그램의 주소 영역이 메모리에 올라가 있어야 한다.
프로그램의 주소 영역 : 코드(code), 데이터(data), 스택(stack) 영역으로 구분됨
- 코드(code) : 작성한 프로그램 함수들의 코드가 cpu에서 수행할 수 있는 기계어 명령 형태로 변환되어 저장되는 부분
- 데이터(data) : 전역 변수 등 프로그램이 사용하는 데이터를 자정하는 부분
- 스택(stack) : 함수가 호출될 떄 호출된 함수의 수행을 마치고 복귀할 주소 및 데이터를 임시로 저장하는 데에 사용되는 공간
ex) X라는 함수 수행 중 Y라는 함수를 호출한 상황
프로그램은 X함수에서 Y함수를 호출한 지점을 스택에 저장해놓았다가 Y 함수가 수행된 후 스택에 저장된 주소 위치로 다시 돌아와 코드를 계속 수행한다.
ex) A라는 프로그램이 CPU를 할당받아 실행 도중 인터럽트가 발생한 상황
A는 현재 수행 중인 명령의 위치를 운영체제가 관리하는 프로세스 제어블록(PCB)에 저장한다.
PCB(Proccess Control Block)
운영체제가 각 프로세스를 관리하기 위해 프로세스당 유지하는 정보
2. 컴퓨터 시스템의 작동 개요
프로그램 카운터(PC) : CPU가 수행해야 할 메모리 주소를 담고 있는 레지스터
CPU는 매번 프로그램 카운터(PC)가 가리키는 메모리 위치의 명령을 처리함
메모리에는 사용자 프로그램들과 운영체제가 같이 올라가 있다.
- 커널모드(kernel mode) : pc가 메모리 주소 중 운영체제가 존재하는 부분을 가리키고 있음
-
사용자모드(user mode) : pc가 메모리 주소 중 사용자 프로그램이 존재하는 메모리 위치를 가리키고 있음
- 일반명령 : 모든 프로그램이 수행할 수 있는 명령(메모리에서 자료를 읽어와 cpu에서 계산하고 결과를 메모리에 쓰는 일련의 명령)
- 특권명령 : 운영체제만 수행할 수 있는 명령(보안이 필요한 명령으로 입출력 장치, 타이머 등 각종 장치에 접근하는 명령)
Mode bit
사용자 프로그램의 잘못된 수행으로 다른 프로그램 및 운영체제에 피해가 가지 않도록 하기 위한 보호장치(하드웨어적 구현)
일반명령과 특권명령을 구분하게 도와준다
시스템 콜(system call)
사용자 프로그램이 운영체제에게 특권명령의 대행을 요청하는 것
3. 프로그램의 실행
프로세스(process) : 현재 수행 중인 프로그램
-
커널의 스택은 일반 사용자 프로그램의 스택과 달리 현재 수행 중인 프로세스 마다 별도의 스택을 두어 관리한다
-
PCB : 운영체제가 각 프로세스를 관리하기 위해 프로세스당 유지하는 정보
❗ 주의해야 할 사항
프로그램 내의 함수호출 시 : 해당 프로그램의 스택에 복귀 주소를 저장
시스템 콜이나 인터럽트 발생으로 CPU의 수행 주체가 운영체제로 바뀌는 순간 : 스택이 아닌 PCB에 복귀 정보를 저장한다!
4. 사용자 프로그램이 사용하는 함수
사용자 정의함수
프로그래머가 직접 작성한 함수
함수호출 시 자신의 주소 공간에 있는 스택을 사용
라이브러리 함수
프로그래머 본인이 직접 작성하지는 않았지만 이미 누군가가 작성해놓은 함수를 호출만 하여 사용하는 경우
함수호출 시 자신의 주소 공간에 있는 스택을 사용
커널함수
시스템 콜 함수와, 인터럽트 처리 함수
운영체제 커널의 주소 공간에 코드가 정의된다.
5. 인터럽트
원칙적으로는 인터럽트 처리 중에 또다른 인터럽트가 발생하는 것을 허용하지 않는다.
(데이터의 일관성이 유지되지 않는 문제가 발생할 수 있기 때문)
but
인터럽트마다 중요도가 다르기 떄문 상대적으로 낮은 중요도를 가진 인터럽트를 처리하는 도중 중요도가 더 높은 인터럽트가 발생하는 것을 허락할 필요가 있다.
6. 시스템 콜
시스템 콜
사용자 프로그램이 운영체제에게 I/O를 요청할 때 사용하는 인터럽트
일반 함수호출과는 상이한 방법을 사용 : 프로그램 자신이 인터럽트 라인에 인터럽트를 세팅하는 명령을 통해 이루어짐
프로그램이 CPU를 빼앗기는 경우 두 가지
-
타이머 인터럽트 : 특정 프로그램에 의해 CPU가 독점되는 것을 방지하기 위한 인터럽트, 시분할 시스템의 구현을 위한 필수적 요소 (타이머는 HW이다)
-
입출력을 요청을 위한 시스템 콜 : 입출력 요청을 위해 시스템 콜을 하는 경우, CPU를 다른 프로세스에게 이양하게 된다.(기다리면 비효율적 자원 활용)
7. 프로세스의 두 가지 실행 상태
-
사용자모드에서의 실행 상태 : 사용자 정의함수, 라이브러리 함수
-
커널모드에서의 실행 상태 : 입출력 시스템 콜
시스템 콜을 통해 실행되는 것이 프로세스 A의 코드가 아닌 운영체제 커널의 코드이지만, 시스템 콜이 수행되는 동안 커널이 실행상태에 있다고 하지 않고 프로세스 A가 실행 상태에 있다고 말한다.
프로그램의 실행이 끝날 때에는 커널모드로 진입해 프로그램을 종료한다!
댓글남기기