본문 바로가기

Computer Science/OS

컴퓨터 시스템의 동작 원리 - 명령어의 구조, 명령어의 실행,인터럽트, 프로세서의 상태변화, 스케줄러

컴퓨터 시스템의 동작 원리 - 명령어의 구조

 

 

 

직접주소, 간접주소가 있습니다.

 

 

컴퓨터 시스템의 동작 원리 - 명령어의 실행

 

 

인출 사이클 때는 뭐하는 거였나? 

- 메모리에서 명령어를 읽어 명령어 레지스터 (IR)저장하고, 프로그램 카운터 (PC)를 증가시킴

- 인출 사이클에 소요되는 시간을 명령어 인출 시간이라고

 

 

실행 사이클execution cycle

- 인출한 명령어를 해독하고 그 결과에 따라 제어 신호를 발생시켜 명령어 실행

- 실행 사이클에서 소비되는 시간을 실행 시간이라고

 

 

간접 사이클indirect cycle

- 간접 주소 지정 방법을 사용하는 명령어의 실행 사이클 전에 유효 주소를 읽어 옴

 

인터럽트 사이클 interrupt cycle

- 실행 사이클 완료 후 인터럽트 사이클

- 인터럽트 요구가 있는지 검사하여 인터럽트 요구가 있으면 현재 수행 중인 프로그램의 주소(PC) 스택과 같은 메모리의 특정 장소에 저장. 프로그램 카운터 (PC) 에는 인터럽트 처리 루틴의 시작 주소를 저장.

 

인터럽트란?

인터럽트는 프로그램 실행 중에 CPU의 현재 처리 순서를 중단시키고

다른 동작을 수행하도록 요구하는 시스템 동작

 

 

 

 

인출 사이클이 실행될 때 어떤식으로 동작하는지 보여줍니다.

 

각 클럭마다 cpu가 의미있는 연산을 합니다. 이것을 마이크로 연산 이라고 부릅니다.

 

 

 

간접 사이클이 실행될 때 어떤식으로 동작하는지 보여줍니다.

 

IR에 있던것이 간접 주소였으니깐 MAR로 넘깁니다.

 

 

 

인터럽트 사이클을 보여주고 있습니다.

 

인터럽트 서비스 루틴으로 가야하기 때문에 돌아올 주소를 저장해야 합니다.

MBR에 있는 것을 SP에 넣어야 합니다.

 

메모리중 일부에 스택을 만들어 놓습니다. 돌아올 주소를 스택에 넣습니다.

스택의 top을 변경하기 위해서 스택의 포인터를 옮겨줍니다.

 

 

 

 

컴퓨터 시스템의 동작 원리 - 인터럽트

프로그램을 실행하다가 인터럽트 서비스 루틴을 실행하고 다시 프로그램에 오는 것 입니다.

 

 

이게 인터럽트 사이클 일까요? 아닙니다.

인출,실행,간접 사이클 중에 인터럽트가 있는 것 입니다.

 

인터럽트 사이클은 마이크로 연산들로 구성된 명령어가 실행되는 전체 과정중 일부입니다.

 

 

돌아올 주소는 스택에다가 보관합니다.

새로운 PC가 B의 시작주소 입니다.

 

 

인터럽트의 종류

 

우선적으로 처리되는 인터럽트를 기준으로 나눠봤습니다.

 

SVC는 커널 모드에 무언가를 호출하기 위해서 사용하는 것 입니다.

 

동기적 - 프로그램 어떤 라인,특정한 명령어 에서 인터럽트가 발생할지 정해져 있는 것입니다.

비동기적 - 외부에서 일어나는 것은 언제 걸릴지 모릅니다.

 

즉, 동기적은 언제 들어올지 예측이 되는 것 입니다.

 

동기적 - SVC, 프로그램 검사, 입출력

비동기적 - 정전, 기계, 외부신호

 

입출력 - 언제 입출력이 끝날지 모르기 때문에 비동기적 입니다.

 

답은

동기적 - SVC, 프로그램 검사

비동기적 - 정전, 기계, 외부신호, 입출력

 

 

 

1번이라고 생각합니다.

프로그램 내부에 명령어를 발생해서 사용되는 것입니다.

아니였습니다.

 

 

4번은 

운영체제에서 시간을 다써서 인터럽트를 발생시키는 거라고 합니다.

 

입출력을 시킬 때도 동기적 인터럽트 입니다.

 

 

인터럽트에 의한 제어의 이동

시간이 지나서

프로세스가 실행될 때 인터럽트가 발생하면 커널로 들어가서 처리를 한다음 다시 프로세스가 실행됩니다.

 

운영체제의 내부가 커널입니다.

 

실제 커널 프로그램, 유저 프로그램이 올려져 있는 메모리가 다릅니다.

 

 

인터럽트 조치 = 인터럽트 서비스 루틴을 도는 것

 

인터럽트를 이용해서 다중 프로그래밍을 할 수 있습니다.

프로세서가 1개가 있는데 프로그램 1개를 실행하다가 시간이 지나면 인터럽트를 발생해서 다른 프로그램을 쓸 수 있습니다.

 

프로그램이 입출력을 걸면 cpu가 다른 프로그램이 실행되다가 다시 입출력을 실행할 수 있습니다.

 

 

 

i/o가 느려서 i/o 제어기를 사용합니다.

 

i/o제어기에는 상태 레지스터, 데이터 레지스터 (버퍼) 가 있습니다.

 

이런식으로 하면 계속 cpu가 상태 레지스터를 읽어야 합니다.

 

만약 인터럽트를 사용한다면 인터럽트가 발생할 때만 버퍼의 상태를 보면 됩니다.

 

장치들이 인터럽트를 발생시킵니다.

 

인터럽트를 보내는 회선을 인터럽트 요청 회선이라고 합니다.

 

단일 회선이 있고 다중회선이 있습니다.

 

단일은 어떤 장치가 보냈는지 알아내야 합니다.

 

 

프로세스와 스레드

프로세스의 개념과 상태 변화

- 프로세스의 개념

- 프로세스의 상태 변화와 상태 정보

 

 

 

프로세스의 개념

- 프로세스는 누구하고 박자는 맞춰야 하는 것이 아닙니다.

 

- 다른것이 무엇을 해야 실행하는 것이 아닌 실행할 수 있다면 그냥 실행하는 것이 프로세스 입니다.

 

- OS가 프로세스 컨트롤 블록을 1개씩 만듭니다.

 

- 디스패치 = cpu에 올려놓는 것, cpu를 점령하는 것

 

메모리에 들어있다고 해서 그게 cpu를 차지하고 있는 것이 아닙니다.

메모리에 많은 프로세스가 있습니다. 

한 순간에는 하나의 프로세스만 cpu를 차지합니다.

 

 

디스크에 있는 프로그램이 실행될 때 메모리에 올라옵니다.

 

그 때 메모리를 차지하고 있는 모습오른쪽과 같습니다.

 

오른쪽에 대한 구조 정보를 담아둬야합니다. 그것이 프로세스 제어 블록 입니다.

 

이 중에 코드들은 어디에 들어있을까요? text에 들어있습니다.

 

왜 프로세스가 stack을 가지고 있을 까요? 함수 호출할 때 스택에 쌓입니다.

 

main을 호출할 때 매개변수는 로컬 변수로서 존재합니다.

모두 스택에 저장됩니다.

 

프로그램 카운터가 가리키는 부분은 코드 부분입니다.

 

프로그램 중간에 메모리를 사용할 때 에 쌓이게 됩니다.

 

데이터 부분은 전역변수, 문자열 상수가 들어갑니다.

프로그램 시작 전에 크기가 뻔할 때, 미리 알 수 있는 것은 데이터에 넣습니다.

 

스택, 힙은 프로그램 사용되면서 늘어났다 줄었다 합니다.

 

똑같은 그림입니다.

스택 영역에 argc, argv가 제일먼저 실행되기 때문에 스택위에 적어준것 입니다.

 

data를 초기화된 것과 안된 것으로 나눠놨습니다.

 

프로세스의 개념 - 프로세스 종류

 

 

 

2번입니다.

프로세스는 누구와 맞출 필요없이(동기화) 혼자서 실행될 수 있습니다.

 

 

3번 입니다.

 

메모리 할당 받았다고 cpu 를 할당받는것은 아닙니다.

 

 

프로세스의 상태 변화와 상태 정보

cpu를 차지한 상태(=디스패치)가 실행 입니다.

 

일단 메모리에 올라오면 준비 상태 입니다.

 

시간 종료가 되지 않았는대도 cpu를 놓는 순간이 있습니다.(대기상태)

이벤트를 기다리거나, 입출력을 기다리는 상태입니다.

ex)자식 프로세스 종료가 되야하는 wait가 있습니다.

 

대기와 준비는 다릅니다.

준비는 언제든 디스패치가 될 수있고

대기는 이벤트나 입출력이 끝나야 준비가 될 수 있습니다.

둘다 쉬고 있는건 동일 합니다.

 

상태 변화들 중 프로세스 스스로 하는 것은?

1,2번이라고 생각했습니다.

 

정답 - 3번이였습니다.

 

운영체제가 강제로 1,2번을 하는것 입니다.

프로세스가 스스로 이벤트가 필요해서 입출력 명령을 내려서 대기로 가는 것 입니다.

 

 

1,2 - 운영체제에서 cpu를 사용할 수 있다면 1을 실행합니다.

cpu 사용 시간이 다되면 2를 실행합니다.

 

3 - 프로세스가 이벤트나 입출력을 모두 완료했다면 다시 준비상태로 갑니다.

4 - n

 

5 - 프로세스가 이벤트나 입출력을 실행하려면 대기 상태로 가야합니다.

6 - n

 

 

프로세스의 상태 변화와 상태 정보 - 스케줄러

준비 큐? 준비되어있는 프로세스들을 줄세워 둔것입니다.

 

디스패처 - PC의 값을 새로운 것을  넣는 값을 합니다.

실무적인 일을 하는 것 입니다.

 

거기서 스케줄러가 고르는 역할을 합니다.

스케줄러가 어떤 프로세서가 cpu를 가져가는지 결정하는 역할을 합니다. 디스패처보다 더 높습니다.

생성에서 종료까지 과정을 관리합니다.

 

생성되거 준비상태 까지 가는것은 메모리를 차지하는 것 입니다.

메모리에 올라와 있는 프로세스의 갯수스케줄러가 결정할 수 있습니다.

 

스케줄러가 프로세스를 많이 생성하면 다중 프로그래밍이 높고

스케줄러가 프로세스를 적게 생성하면 다중 프로그래밍이 낮습니다.

 

 

728x90