[운영체제와 정보기술의 원리] 4. 프로그램 구조와 인터럽트

진예·2023년 12월 27일
0

Operating System

목록 보기
3/8
post-thumbnail

💡 프로그램의 구조

컴퓨터 프로그램 : 함수들의 집합

: 함수1 수행 중 함수2 호출 ➡️ 함수2 수행 종료함수1복귀 ➡️ ...


📒 프로그램 주소 영역

프로그램CPU에서 명령을 수행하기 위해서는 명령을 담은 프로그램의 주소 영역메모리에 올라간 상태여야 한다. 각 프로그램이 가지는 독자적인 주소 공간가상메모리라고 한다.

  • 코드 영역 : 작성한 코드가 CPU가 처리할 수 있는 기계어 명령 형태로 변환되어 저장

  • 데이터 영역 : 프로그램이 사용하는 데이터

  • 스택 영역 : 호출된 함수의 수행을 마치고 복귀할 주소 및 데이터 임시 저장

일반적으로 메인 함수에서 시작하여 다른 함수 호출 시, 스택호출 위치를 저장해두었다가 호출된 함수의 수행이 종료되면 다시 해당 위치로 복귀하여 메인 함수의 수행을 이어나간다.

인터럽트도 이와 유사한 원리로, CPU가 명령을 처리하다가 인터럽트가 발생하면 PCB에 해당 위치를 저장해두고, 인터럽트 처리 후 해당 주소를 복원시켜 처리하던 명령을 이어나간다.


📒 컴퓨터 시스템의 작동

프로그램 카운터 : CPU가 수행해야 할 메모리 주소를 담고 있는 레지스터

CPU는 어떤 프로그램을 처리할 지 스스로 결정하지 못하기 때문에, 프로그램 카운터가 가리키는 메모리 위치의 명령을 처리한다. 함수 호출과 같은 특별한 이동이 없는 경우에는 일반적으로 명령을 순차적으로 처리한다.


📝 사용자 모드 vs 커널 모드

  • 사용자 모드 : 프로그램 카운터가 사용자 프로그램을 가리키는 경우

  • 커널 모드 : 프로그램 카운터가 커널을 가리키는 경우

메모리에는 사용자 프로그램과 운영체제의 핵심인 커널이 존재하는데, 프로그램 카운터가 사용자 프로그램을 가리키고 있다면 사용자 모드, 커널을 가리키고 있다면 커널 모드에서 CPU가 수행된다고 한다.


📝 일반 명령 vs 특권 명령

  • 일반 명령 : 모든 프로그램이 수행할 수 있는 명령

  • 특권 명령 : 커널만 수행할 수 있는 명령

사용자 프로그램에서 입출력과 같은 특권 명령을 수행해야 하는 경우, 시스템 콜을 통해 운영체제에게 특권 명령 수행을 요청할 수 있다. 이 때, CPU의 모드 비트가 1에서 0으로 바뀌면서 CPU의 제어권운영체제로 넘어가게 된다.


📒 프로그램의 실행

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

한정된 메모리를 효율적으로 사용하기 위해 당장 CPU의 수행에 필요한 부분메모리에 올리고, 나머지 부분은 스왑 영역에 내려놓는 방식으로 운영된다.


📝 커널의 주소 공간

  • 코드 : CPU, 메모리 자원 관리 + 시스템 콜 및 인터럽트 처리 + ...

  • 데이터 : 시스템 내의 모든 자원(하드웨어, 프로세스, ...)을 관리하기 위한 자료구조 (PCB, ...)

  • 스택 : 함수 호출 시 복귀 주소 저장
    ➡️ 수행 중인 프로세스마다 별도의 스택을 두어 관리

프로세스 수행 중, 시스템 콜을 통해 커널이 특권 명령을 수행하면서 시스템 콜 내부에서 다른 함수를 호출하게 되면 복귀 주소커널의 스택에 저장된다. 이 때, 커널여러 프로세스의 특권 명령을 처리할 수 있으므로 프로세스 별로 스택을 구분하여 관리한다.

또한, 시스템 콜에 의해 CPU의 수행 주체가 바뀐 경우에는 스택이 아닌 PCB에 복귀 주소를 저장한다.


📒 함수

  • 사용자 정의 함수 : 사용자가 직접 작성한 함수
  • 라이브러리 함수 : 이미 작성되어 호출을 통해 사용하는 함수

: 프로세스의 주소 공간에 포함되어, 호출 시 내부 스택에 저장됨

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

: 커널 함수 호출 시 CPU의 사용 주체운영체제로 변경됨


📒 인터럽트

외부 장치CPU의 처리를 요청하기 위해 보내는 신호

CPU는 기본적으로 순차적으로 명령을 수행하는데, 다음 명령을 수행하기 인터럽트 라인을 확인하여 인터럽트가 발생했으면 인터럽트를 처리한 후 다음 명령을 처리한다.

원칙적으로 인터럽트 처리 중 다른 인터럽트가 발생하는 것을 허용하지 않지만, 현재 처리 중인 인터럽트보다 우선순위가 높은 인터럽트가 발생하게 되면 CPU는 현재 처리중인 인터럽트의 수행 지점을 저장하고 중단한 후 우선순위가 높은 인터럽트먼저 처리한다.


📝 시스템 콜

사용자 프로그램특권 명령을 수행해야 하는 경우, 운영체제에 특권 명령 대행을 요청하는 것

일반적인 외부 장치는 내부의 컨트롤러가 인터럽트를 발생시키는데, 사용자 프로그램커널 함수를 호출해야 하는 경우에는 프로그램 자신이 직접 인터럽트 라인인터럽트를 세팅한다.


📒 프로세스 실행 상태

  • 사용자 모드에서의 실행 상태 (user mode running)
    : CPU가 사용자 프로그램의 명령을 처리하는 상태

  • 커널 모드에서의 실행 상태 (kernel mode running)
    : CPU가 커널시스템 콜 함수를 실행하는 상태

만약 사용자 프로그램시스템 콜을 호출하여 커널이 실행 중인 상태라면, 커널이 사용자 프로그램의 수행을 대신 하고 있는 상태이므로 프로세스가 커널모드에서 실행중이라고 한다.


출처 : 운영체제와 정보기술의 원리

profile
백엔드 개발자👩🏻‍💻가 되고 싶다

0개의 댓글