Skip to content

Latest commit

 

History

History
75 lines (55 loc) · 6.75 KB

File metadata and controls

75 lines (55 loc) · 6.75 KB

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

프로그램의 내부 구조는 함수들로 구성 되어있다. CPU에서 명령을 수행하려면 함수들의 주소가 메모리에 올라가있어야 한다. 메모리 영역

  • code 작성한 프로그램의 함수들의 코드가 CPU에서 수행할 수 있는 기계어 명령들이 저장되어 있다.

  • date 전역변수등 프로그램이 사용하는 데이터를 저장되어 있다.

  • stack 함수가 호출될때 호출된 함수의 수행을 마치고 복귀할 주소및 데이터를 임시로 저장하는 곳.

    함수호출과 인터럽트 동작 원리는 서로 비슷하다 함수나 인터럽트가 발생되면, 실행되고 있던 함수나 인터럽트는 실행되고있던 명령의 위치를 저장을 해두고 새로운 함수나 인터럽트를 처리하고 다시 돌아와 저장해 두었던 함수나 인터럽트 작업 지점부터 수행을 이어가게 된다.

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

CPU는 계산 능력은 가지고 있지만 어떤 작업을 해야하는지 스스로 결정하지는 못한다. 그래서 프로그램 카운터라는 레지스터를 이용해 CPU가 해야할 명령을 메모리에서 읽어와서 실행한다.

컴퓨터 구성 요소

하드웨어 - CPU,RAM,M/B,파워,HDD 입출력 장치별로 존재하는 작은 CPU와 메모리를 각각 출력 컨트롤러와 로컬버퍼라고 부른다.

프로그램 카운터가 메모리 주소 중 운영체제가 존재하는 부분을 가리키고 있으면 "커널모드"에서 수행 중 이라고 말하고 프로그램 카운터가 사용자 프로그램이 존재하는 메모리 위치를 가리키고 있다면 "사용자모드"에서 CPU를 수행 하고있다고 말한다.

CPU가 수행하는 명령 일반명령 -메모리에서 자료를 읽어와 CPU에서 계산하고 결과를 메모리에 쓰는 일련의 명령들 일반명령은 모든 프로그램이 실행할수 있다.

특권명령 -보안이 필요한 명령으로 입출력장치,타이머등 장치에 접근하는 명령이다.운영체제만 수행할 수 있도록 제한한다.

위 두개의 명령들을 체크 하기위에 모드비트(커널모드 0, 사용자모드 1)를 둔다.

시스템 콜이라는 서비스 요청이 들어오면 운영체제는 특권명령을 요청하여 특권 명령이 필요한 화면출력 디스크파일 접근 등등을 수행한다. ex) 디스크에서 자료를 읽어오는 시스템 콜이면, CPU가 디스크 컨트롤러에게 데이터를 읽어오라는 명령을 내리면 디스크 컨트롤러는 디스크한테 데이터를 읽어와서 자신의 로컬버퍼에 저장 한 후 이작업이 완료되면 디스크 컨트롤러가 CPU에 인터럽트를 발생시켜서 입출력 작업이 완료됨을 알려준다.

CPU는 프로그램 카운터가 가리키는 메모리위치의 명령만 수행한다. 주변 장치는 CPU의 도움이 필요한 경우 인터럽트를 발생시킨다. 인터럽트를 발생시키기 위해 인터럽트 라인을 세팅하고, CPU는 매번 명령을 실행할때마다 인터럽트 라인을 확인해 인터럽트가 있으면 CPU는 해당 인터럽트를 처리하기 위한 루틴으로 넘어가 커널 내의 인터럽트 처리 코드를 수행한다.

3.프로그램의 실행

'프로그램이 실행 ~ing' 디스크에서 정보를 가져와 메모리에 올라갔다. 프로그램이 cpu를 할당 받고 명령을 수행하는 ~ing

일반적인 컴퓨터의 경우 CPU는 한개고 매 시점 CPU에서 명령을 수행하는 프로그램은 하나다. 요즘 CPU가 동작 속도가 빨라져서 동시에 실행되는것 처럼 보일 뿐이다. 프로그램의 주소 공간 중 당장 CPU의 수행에 필요한 부분은 메모리에 올려놓고 나머지 부분은 스왑 영역에 내려놓는 방식으로 운영된다. 프로세스의 메모리 영역은 위에서 언급 했듣이

  • code 작성한 프로그램의 함수들의 코드가 CPU에서 수행할 수 있는 기계어 명령들이 저장되어 있다.
  • date 전역변수등 프로그램이 사용하는 데이터를 저장되어 있다.
  • stack 함수가 호출될때 호출된 함수의 수행을 마치고 복귀할 주소및 데이터를 임시로 저장하는 곳.

각각의 프로그램마다 주소 공간을 별도로 가지며, 프로그램마다 독자적으로 존재하는 이와 같은 주소 공간을 우리는 가상메모리 또는 논리적 메모리라 부른다. 운영체재도 하나의 프로그램이므로 운영체제 커널 역시 위 3개의 주소 공간 구성을 가지고 있으며 운영체제의 기능이 하드웨어 자원을 효율적으로 관리하는 것과 응용프로그램 및 사용자에게 편리한 서비스를 제공한다. 커널의 코드는 CPU, 메모리등 자원을 관리하기 위한 부분과 사용자에게 편리한 인터페이스를 제공한다. 그 밖에도 커널의 코드는 시스템 콜 및 인터럽트를 처리하기 위한 부분을 포함한다.

커널의 데이터 영역에는 자원을 관리하기 위한 자료구조가 저장되는데 수행 중인 프로그램을 프로세스라고 부르고, 프로세스의 상태,CPU 사용정보, 메모리 사용 정보 등을 유지하기 위한 자료 구조인 PCB를 두고 있다.

프로세스 제어 블록(Process Control Block, PCB) 특정한 프로세스를 관리할 필요가 있는 정보를 포함하는 운영 체제 커널의 자료 구조

그리고 하드웨어와 소프트웨어를 포함하는 시스템 내의 모든 자원을 관리하기 위한 자료구조를 각각 유지를 한다.

커널의 스택 영역은 일반 프로그램의 스택 영역과 마찬가지로 함수호출의 복귀 주소를 저장하기 위한 영도로 사용된다. 프로그램이 자기 자신의 코드 내에서 함수호출 및 복귀 주소를 유지하기 위해서는 자기 주소 공간 내의 스택을 사용하고, 시스템 콜이나 인터럽트 등으로 운영체제의 코드가 실행되는 중에 함수호출이 발생할 경우 커널 스택을 사용하게 된다. 프로그램내의 함수호출 시 해당 프로그램의 스택에 복귀주소를 저장하지만, 시스템 콜이나 인터럽트 발생으로 CPU의 수행 주체가 운영체제로 바뀌는 순간에는 직전에 수행되던 프로그램의 복귀 정보를 스택이 아닌 PCB에 저장 한다는 점 명심!! 커널 역시 함수 구조로 이루어져 커널 코드가 수행되는 도중에 들어오는 함수호출은 커널스택을 사용하게 된다. 커널 스택은 프로세스마다 별로도 두고 있어서 커널내에서 이루어지는 함수호출은 직전에 CPU를 가지고 있던 프로세스 커널스택을 사용한다.