본문 바로가기
  • 시 쓰는 개발자
CS 개념/운영체제

운영체제 수업 (7) 03/26

by poetDeveloper 2024. 3. 28.

학교 수업을 정리한 내용입니다. 참고만 해주세요.

 

0326 화요일

 

  • Program : HDD에 있는 코드나 컴파일한 file을 의미
  • Process : 메모리에 올라와 현재 실행중인 프로그램
  • Function : return 있음
  • Procedure : return 없음

스케줄러와 프로세스 개요

이것을 이야기할 때 I/O Device가 빠질 수 없다. C언어에서도 배열을 초기화 할때 만약 100번 scanf를 받으면 매우 오래걸리는 일이지만, read()를 쓰면 N바이트를 한번에 읽어올 수 있어서 초기화를 빠르게 할 수 있다.

즉, printf, scanf를 할때마다 CPU가 계속 기다릴 수 없는 노릇이다. IO 과정에서 만약 어떤 값이 필요할 때 3가지 방법이 있다.

  1. CPU가 직접 값을 가지고 온다. → 매우 비효율적이고 오래 걸린다.
  2. 다른 누구에게 시켜놓고 CPU는 기다린다. → 이것도 결국 CPU가 노는 시간이 발생한다.
  3. 다른 누구에게 시켜놓고 CPU는 잠깐 다른일 하다가, 데이터 가져오면 다시 그 일로 돌아간다. → 이것이 제일 효율적이다. 그리고 데이터를 가져왔으면 가져왔다고 CPU에게 알려줘야 한다.(인터럽트)

결국 우리가 원하는 것은 I/O가 필요한 상황에서 CPU가 놀면 안된다는 것이다. 그래서 Process가 많을 때는 동시에 이것을 돌리기 위해 자원을 공유하게 된다. (김치찌개와 잡채 프로세스가 도마를 공유함)

 

I/O 시나리오

만약 A 프로세스를 실행하고 있는데 HDD로부터 값을 읽어와 메인 메모리에 올려야 하는 상황이 일어났다고 하자. 이럴 때는 어떻게 할까?

  1. 프로세스 A가(김치찌개) HDD에서 값을 읽어올 때까지(두부 사올때까지) 기다린다. → 단순하지만 시간이 매우 오래걸림
  2. HDD Controller를 이용해서 HDD에서 읽어올동안 CPU는 기다린다. → 위에보단 낫지만 CPU가 기다리는 게 낭비다.
  3. HDD Controller가 HDD가서 값 읽게 시키고, 그동안 CPU는 잠시 프로세스 A(김치찌개)를 내려놓고, 프로세스 B(잡채)를 실행시킨다. 이때, 만약 HDD컨트롤러가 값을 읽어왔으면 CPU에게 인터럽트를 걸어서 데이터 가져왔다고 꼭 알려줘야한다.

이중에서 고른다고 하면 당연히 3번째 안을 채택할 것이다. 이때 다시 프로세스 A로 돌아오기 위해서는 해당 프로세스의 정보를 기억하고 있어야한다. 그러니 프로세스 A의 주소를 잠시 저장해두었다가 돌아올 때 해당 주소값만 PC값에 세팅하면 끝난다.

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

운영체제 수업 (8) 03/28  (1) 2024.04.03
운영체제 수업 (6) 03/21  (0) 2024.03.28
운영체제 수업 (5) 03/19  (1) 2024.03.25
운영체제 수업 (4) 03/14  (0) 2024.03.22
운영체제 수업 (3) 03/12  (0) 2024.03.19