[개발일지]/필기

System Structure & Program Execution 2

broship 2021. 7. 28. 08:21

instruction:

- 실행해야하는 기계어, 보통 4비트로 구성

- 순차적으로 기계어를 실행하다 반복문이나 함수를 만나면 점프뜀

- 매 기계어를 실행하고 interrupt 라인을 체크, interrupt가 있으면 실행해야 할 기계어를 잠시 멈추고 CPU를 OS에게 줌

- OS는 CPU를 받고 interrupt 상황에 따라 인터럽트 백터를 참고하여 해당 인터럽트를 처리하는 커널 함수(인터럽트 처리 루틴)을 실행함

 

- OS가 CPU를 가지고 있을때는 mode bit이 0, 모든 기계어 실행 가능(다른 사용자의 메모리나 I/O 디바이스 접근 가능)

- 사용자 프로그램이 CPU를 가지고 있을땐 mode bit이 1, 제한된 기계어만 사용 가능

- 사용자 프로그램이 I/O 할일이 있을때 OS에게 요청해야 하는데, mode bit이 1이라 바로 OS로 가는건 막혀있음, 그래서 스스로 인터럽트를 걸어서 CPU를 OS가 가지게 하면(시스템 콜) mode bit이 0으로 바뀌고 OS가 사용자 프로그램이 요청한 대로 I/O 디바이스에 접근해서 처리해줌

 

Interrupt: 입출력 장치들(하드웨어들)이 CPU와 정보 교신이 필요할때

- 하드웨어가 발생시킨 인터럽트

Trap: 사용자 프로그램이 돌아가다가 자신이 처리 못하는 걸 OS에게 부탁할때

- 소프트웨어가 발생시킨 인터럽트

- Exception: 프로그램이 오류를 범한 경우

- System call: 프로그램이 커널 함수를 호출하는 경우

 

- 이 외에도 timer가 거는 인터럽트가 있음

 

 

동기식 입출력과 비동기식 입출력:

1) 동기식 입출력(synchronous I/O)

- I/O 요청 후 입출력 작업이 완료된 후에야 제어가 사용자 프로그램에 넘어감

- 구현방법1:

I/O가 끝날 때까지 CPU를 낭비시킴

매 시점 하나의 I/O만 일어날 수 있음

- 구현방법2:

I/O가 완료될 떄까지 해당 프로그램에게서 CPU를 빼앗음

I/O 처리를 기다리는 줄에 그 프로그램을 줄 세움

 

2) 비동기식 입출력(asynchronous I/O)

- I/O가 시작된 후 입출력 작업이 끝나기를 기다리지 않고 제어가 사용자 프로그램에 즉시 넘어감

 

- 두 경우 모두 I/O의 완료는 인터럽트로 알려줌

 

- Read 하는 경우는 read한 결과를 가지고 프로그램을 실행해야 하기에 대게 동기식 입출력을 사용

- write 하는 경우는 굳이 write한 결과를 기다릴 필요는 없기 때문에 대게 비동기식 입출력을 사용

 

저장장치 계층구조

- 초록색: 빠르고, 비싸고, 휘발성

- 빨간색: 느리고, 싸고, 비휘발성

- 밑으로 내려갈수록 점점 속도가 느려짐, 빠른 CPU가 기다리는 시간을 최소화 하기 위해 중간에 미리 데이터를 가져다 놓는 Cache memory 라는걸 놔둠

- Caching: 처음에는 데이터를 밑에서부터 꺼내오지만 일단 꺼내온 후에는 잠시 저장해놨다가 재사용

 

 

프로그램의 실행

- 실행 파일은 원래 File system에 있다가 실행이 시작되면 그때 메모리에 올라감

- 바로 메모리에 올라가지 않고 중간에 Virtual memory라는 각 실행 파일의 독자적인 주소 공간이 생김

code: 프로그램의 기계어 코드

data: 변수

stack: 함수를 호출할때 데이터를 쌓았다가 꺼내가는데 사용

- 모든 실행파일을 메모리에 올리면 낭비가 되기에 virtual memory에 데이터를 담아두고 사용되는 함수 부분에 관련된 데이터만 메모리에 올렸다가 삭제하고 하는 식으로 진행됨

- 메모리에 올라갔던 파일 중 바로 삭제하면 안되고 잠시 보관해야 하는 데이터들은 Swap area에 잠시 보관해둠

- Address translation: virtual memory에도 주소지가 있고 실제 메모리에도 주소지가 있음, 이 가상 주소지와 실제 주소지를 서로 매칭해주는 역할을 담당함

 

 

- 커널 영역도 똑같이 code, data, stack으로 구성됨

- code 부분에는 각 인터럽트마다 어떤일을 해야하는지 등이 들어있음

- data 부분에는 운영체제가 사용하는 여러 자료구조들이 담겨있음

실제 CPU, memory, disk등을 관리하기 위한 각각의 자료구조등을 담아놓음

실행중인 프로세스에 대한 자료구조등도 담겨있음(PCB)

- 각각의 프로세스는 커널 함수를 호출할 수 있음, 각각의 프로세스의 커널 스택을 stack 공간에 따로따로 집어넣음

 

- 사용자 정의 함수, 라이브러리 함수는 프로세스의 code 영역에 담겨있음, 그래서 함수가 호출되도 해당 프로세스 안에서 점프를 통해 호출됨

- 커널 함수는 운영체제의 code 영역에 담겨있음, 그래서 시스템 콜을 통해 호출을함, 인터럽트를 걸어서 실행

'[개발일지] > 필기' 카테고리의 다른 글

Process Management  (0) 2021.08.12
Process2 - 스레드  (0) 2021.08.10
Process1  (0) 2021.08.03
System Structure & Program Execution 1  (0) 2021.07.25
Introduction to Operating Systems  (0) 2021.07.21