데굴데굴

03. 프로그램 구조와 실행 본문

CS/운영체제

03. 프로그램 구조와 실행

aemaaeng 2023. 3. 12. 15:27
반효경 교수님의 KOCW 강의 '운영체제'와 저서 '운영체제와 정보기술의 원리'를 학습하며 정리한 글입니다.

프로그램 구조와 인터셉트

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

프로그램의 주소 영역

  • 코드: 작성한 프로그램 함수들의 코드가 cpu에서 수행할 수 있는 기계어 명령 형태로 저장됨
  • 데이터: 전역 변수 등 프로그램이 사용하는 데이터를 저장
  • 스택: 함수가 수행을 마치고 복귀할 주소 및 데이터를 임시로 저장

메인 함수에서 실행 시작
다른 함수 호출
새 함수의 위치로 점프하여 함수 실행
원래 호출했던 함수 위치로 되돌아옴

컴퓨터 시스템의 작동 개요

CPU는 매 시점 메모리의 특정 주소에 존재하는 명령을 읽어와 그대로 실행
프로그램 카운터: cpu가 수행해야 할 메모리 주소를 담고 있는 레지스터

  • 일반명령: 메모리에서 자료를 읽어와 cpu에서 계산하고 결과를 메모리에 쓰는 일련의 명령
  • 특권명령: 보안이 필요한 명령, 입출력 장치나 타이머 등에 접근할 때

사용자 프로그램은 스스로 특권명령을 수행할 수 없으므로 시스템 콜을 이용

 

cpu는 명령만 수행하기 때문에 주변 장치의 상황을 지속적으로 파악 불가
-> 필요한 상황에 주변 장치가 인터럽트를 발생시켜 알림

프로그램의 실행

두 가지 의미를 가짐

  • 디스크에 존재하던 실행파일이 메모리에 적재된다
  • 프로그램이 cpu를 할당받고 명령을 수행하고 있다

코드, 데이터, 스택으로 구성된 프로그램의 독자적인 주소 공간을 가상 메모리 또는 논리적 메모리라고 부른다.

커널의 데이터 영역에는 자원을 관리하기 위한 자료구조가 저장됨.

 

현재 수행 중인 프로그램 = 프로세스
데이터 영역 내에 PCB가 포함

 

커널의 스택은 프로세스마다 별도의 스택을 두어 관리

프로그램 내에서 함수를 호출할 때에는 해당 프로그램의 스택에 복귀 주소를 저장, 시스템 콜이나 인터럽트로 cpu 수행 주체가 바뀔 때에는 복귀 주소를 PCB에 저장한다

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

  • 사용자 정의함수: 프로그래머 본인이 직접 작성한 함수
  • 라이브러리 함수: 직접 작성 x, 누군가 써놓은 함수를 호출하여 사용
  • 커널함수: 운영체제 커널의 코드에 정의된 함수
    • 시스템 콜 함수
    • 인터럽트 처리 함수

인터럽트

❓ 인터럽트 처리 중에 또 다른 인터럽트가 발생할 경우
원칙적으로는 비허용, 데이터의 일관성이 유지되지 않을 수 있기 때문
인터럽트마다 중요도가 다름, 더 높은 중요도의 인터럽트가 들어왔다면 처리하던 인터럽트의 수행 지점을 저장하고 새 인터럽트를 처리한다.

시스템 콜

프로그램이 cpu를 할당받고 명령을 수행하다 중간에 제어권을 빼앗기는 경우

  1. 타이머에 의한 인터럽트 발생
  2. 입출력 요청을 위한 시스템 콜

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

  • user mode running -> 자신의 주소 공간에 정의된 코드를 실행
  • kernel mode running -> 커널의 시스템 콜 함수를 실행

프로세스 A가 시스템 콜을 했을 경우 커널이 실행 중이라고 하지 않고 프로세스 A가 실행 상태에 있다고 말한다.
구분짓기 위해 '프로세스 A가 커널모드에서 실행 중'이라고 말함

 

프로그램의 실행이 끝날 때에는 커널 모드로 진입해 프로그램 종료

'CS > 운영체제' 카테고리의 다른 글

04. 프로세스 관리 - 3  (0) 2023.06.27
04. 프로세스 관리 - 2  (0) 2023.06.25
04. 프로세스 관리 - 1  (0) 2023.03.19
02. 컴퓨터 시스템의 동작 원리  (0) 2023.03.12
01. 운영체제 개요  (0) 2023.03.10
Comments