728x90

반효경 운영체제 강의 정리

컴퓨터 시스템 2

사용자 프로그램이 운영체제를 통해서 무언가를 해야할 때에는 시스템 콜을 이용한다!

프로그램 카운터 (PC, Program Counter)

프로그램 카운터는 CPU안에 포함되어 있는데,
이는, 메모리에서 다음 실행되어야할 작업의 주소가 들어있다.
CPU는 이 주소를 바탕으로 다음 작업을 찾아가 작업을 수행하게 된다.

 

인터럽트가 발생한다면?

 

인터럽트가 발생한 경우에는, 프로그램 카운터가 가리키고 있는 주소로 바로 이동하지 않고,
CPU제어권이 OS로 가게 되면서 해당 인터럽트를 우선으로 처리해준다.

동기식, 비동기식 입출력

비교적 최근에 내가 29cm의 지원을 했을때를 떠올려본다.
그때 당시, 자바에서 csv파일을 읽어들여야 하는 작업이 있었다.
그 부분을 토대로 이해해보면
과제에서 csv를 읽어들이는 로직이 필요했는데, 자바에서 다른 작업을 OS에서 메모리를 할당받고, CPU를 할당받게 되면서 잘 진행하다가 파일을 읽어들이는 I/O 관련 작업을 실행하려고 할 때 디스크로 부터 가져와야 하니 커널모드의 운영체제가 필요했을 것이다.
근데 이 맥락에서 자바 프로세스는 CSV파일을 읽어들이는 I/O관련 로직은 사용자 프로그램에서는 진행할 수 없기에 시스템콜을 위한 인터럽트를 발생시킨다.
이렇게 발생되면 CPU는 인터럽트를 감지하여 주도권을 OS에게 넘기고,
OS는 하드디스크를 관리하는 디바이스 컨트롤러에게 위임하여 csv파일을 읽도록 위임하면서, 동기식이라면 디바이스 컨트롤러가 로컬 버퍼에 적재하는 작업을 모두 완료
할때까지 대기한다.
디바이스 컨트롤러가 이작업을 완료하는데까지 CPU는 대기상태에 들어가게 될 것이다.
그리고선 디바이스 컨트롤러가 완료했다는 인터럽트를 발생시키면
CPU는 다시 자바 프로세스에 할당이 된다음 다음 작업을 처리할 것이다.
다시 할당되는 과정을 질문을 해보았는데,
cpu 디스패처로 할당하는것 같다고 답변을 들었다. (이부분은 좀 더 뒤에서 다뤄봐야할듯?)

동기식 입출력

  1. I/O 입출력 작업이 완료되어야 다른 작업 진행 (완료되기 전까지 대기)

이 방법은 완료되기전 까지 대기한다면 CPU가 낭비된다.
매 시점에 하나의 입출력만 가능하게 된다.

  1. I/O 입출력 요청 후 다른 프로세스에게 CPU를 토스한다.

넘겨받은 CPU도 I/O를 요청하여 계속 다음 프로세스에게 CPU를 토스할 수 있다.

비동기식 입출력

비동기식은 I/O입출력을 요청한 후에
바로 CPU 제어권을 얻어서 다른 작업들을 쭉쭉 수행하다가
입출력 작업이 완료되면 인터럽트를 발생시켜줘서 완료 시점을 캐치하게 된다.

두가지 모두 인터럽트를 통하여 알려준다는 사실은 동일하다!!!

Memory Mapped I/O

일반적인 입출력은 메모리에 접근하는 명령과 I/O 장치를 접근해야 하는 명령이 구분되어 있다.
Memory Mapped I/O는 I/O 장치에 대해 메모리 주소를 할당해놓은것이다.
주소로 호출을 하게 되면 그것이 I/O를 하게 되는 것이다.

저장장치 계층 구조

레지스터 -> 캐시 메모리(SRAM) -> 메인 메모리(DRAM) ->
(CPU가 여기서부터 직접 접근 불가) 하드 디스크 -> optical disk -> magnetic tape
이 순서의 계층 구조로 되어있으며, 오른쪽으로 가면 갈수록 비용이 싸면서, 용량 증가하고 속도는 느려진다.

 

이미지 출처 - http://www.kocw.net/home/search/kemView.do?kemId=1046323

 

어떤 프로그램을 실행시키면 메모리의 프로세스로 올라가는데
중간단계를 거치는 것이 가상 메모리
A라는 프로그램의 주소공간 0번지부터 시작하는것이 생기게 된다. (각 프로그램마다)
stack, data, code를 가지고 있음

  • code
    • 인터럽트, 시스템콜 처리 코드
    • 자원 관리 위한 코드
    • 서비스 제공을 위한 코드
    • 쉽게말해 CPU와 소통할 커널부분의 코드들이 적재됨
  • data
    • pcb, cpu, memory, disk 와 소통 가능
  • stack
    • 프로세스 마다의 스택이 생성됨

종료시키면 가상 메모리가 사라짐
통째로 메모리에 올리면 메모리가 낭비되기 때문에
현재 실행되는것만 메모리에서 사용했다가 더이상 사용하지 않으면 제거
커널은 부팅하고나서 띄워지면 항상 상주
결국 프로그램은 커널모드, 유저모드를 반복하다가 끝나게 되는것

728x90

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

운영체제 3강  (0) 2022.08.22
운영체제 2강 - 2  (0) 2022.08.18
운영체제 1강  (0) 2022.08.11
프로세스 상태  (0) 2022.08.10

+ Recent posts