본문 바로가기

[운영체제] 1주차 (2)

50년 전에는 컴퓨터가 (지금에 비해 스펙이 훨씬 낮음에도) 너무 비쌌다.

-> 어떻게 해야 효율적으로 쓸 수 있을까? = CPU와 I/O 장치를 항상 바쁘게 해서 시스템 효율을 높이려면?

 

Single user 시스템에서는 CPU와 I/O를 바쁘게 만들 수 없다.

: CPU 작동 중에 디스크 작업을 하려면 CPU 작업은 중단해야 함

->  둘 다 바쁠 수 없어 전체 효율이 떨어짐

-> Multiprogramming(Batch system)

 

Multiprogramming(Batch system)

기존처럼 하나만 메모리에 올리는 대신 여러 개의 program job(Program job subset)을 올린다

 

* 참고 

왜 process가 아니라 job일까?

예전에는 개인 별로 컴퓨터를 쓰는 게 아니라 프로그래머들이 일종의 '작업 카드'를 만들어서 컴퓨터실에 전달하고

거기서 그 operator가 카드를 컴퓨터에 넣어 돌리는 방식이었다. 그래서 job이라고 하던게 지금까지 이어져 옴

 

Memory layout for a mutiprogramming system

 

Job 1이 CPU를 쓰다가 I/O를 쓰게 되면 CPU가 놀게 되는데, 이 때 놀게 하는 게 아니라 다른 Job이 CPU를 사용하도록 하는 것이다. -> 효율 증가

 

 

Timesharing(Multitasking): Logical extension of multiprogramming

Multiprogramming에서는 CPU를 사용하던 Job이 스스로 CPU를 반납하지 않는 한 다른 job은 CPU를 사용할 수 없다.

멀티태스킹에서는 CPU 등을 1초 미만의 짧은 시간만 할당하고, 그 짧은 시간 동안 job들이 돌아가면서 시스템 자원을 사용한다. 이 때 할당되는 시간을 Time quantum(TQ)라고 한다.

-> 대화형 시스템에서 유리, 현재 많은 운영체제에서 사용하는 방식

 

* 왜 Timeshaing이 대화형 시스템에서 유리한가?

Multiprogramming: Job 1이 CPU를 쓰게 되면 언제까지 쓸 지 모름 -> 다른 Job은 언제 CPU를 받게 될 지 모름

Multitasking: Job 1이 CPU를 쓰게 되면 1초 안에 다른 Job에게 넘겨줌 -> 다른 Job은 1초 정도면 CPU를 쓸 수 있음

=> 즉 Multiprogramming에서는 사용자의 요청에 대한 대답이 언제 돌아올 지 알 수 없으나

Multitasking에서는 길어도 1초 가량이면 대답이 올 것을 보장할 수 있음

 

Timesharing을 위해 운영체제가 지원해야 하는 것

① 여러 job 들이 메모리에 올라가야 되므로 process라는 개념이 도입된다.

② 누가 메모리에 올라갈 것인가? Job scheduling

③ 메모리에 올라간 job 중 누구에게 CPU를 줄 것인가? CPU scheduling

④ 프로세를 메모리에 올려야 되는데 너무 커서 못 올린다 -> 지금 메모리에 있는 걸 디스크에 옮긴 후 올림: Swapping

⑤ 큰 프로세스를 한 번에 메모리에 올리는 게 아니라 작은 단위로 나눈 후 그 단위를 메모리에 올린다: 가상 메모리

 

 

공통점: 여러 개를 올린 후 걔가 반납하면 다른 거에 할당해서 항상 바쁘게 한다

차이: 시스템 반납 조건이 자발적 반납인가, 고정된 크기(OS가 강제로 뺏어서 줌)의 시간인가 -> 대화형에 유리

 

 

OS is interrupt-driven

1) Interrupt

① H/W interrupt

② S/W interrupt(= Trap or Exception)

- divide by zero, program A가 program B의 memory에 access, stack overflow, ...

- System call: Ex) Disk에 파일을 쓰기 위해 운영체제에 요청하고 운영체제가 파일을 씀

- Infinite loop: 한 프로그램이 시스템 자원을 독점하게 됨

 

2) OS는 resource allocater 뿐만 아니라 control program으로써도 동작해야 한다

-> 컴퓨터가 안전하고 안정적으로 운용될 수 있도록 잘못된 사용자로부터 막는다

 

- Infinite loop: 한 프로그램이 시스템 자원을 독점하게 됨

- 어떤 프로그램이 다른 프로그램이나 OS의 메모리를 access하는 경우

-> Kill the program

 

Dual mode execution: CPU 모드를 여러 개를 설정해 기계어의 모드와 현재의 모드가 맞을 경우만 그 명령어를 실행함

Timer: 일정 시간 내에 프로세스가 job을 끝내지 않으면 CPU를 다른 process에 할당함(Timesharing과도 관련)

 

Dual-mode Operation

운영체제가 어떤 명령어를 실행할 수 있는지 없는지 결정하게 한다

하드웨어적 지원 필요: Mode bit

Mode bit

하드웨어에 설정된 mode bit와 명령어에 assign된 mode와 비교 후 일치할 때만 그 명령어를 실행한다.

Dual mode Mode bit 값에는 Kernel mode와 User mode가 설정될 수 있다.

전자는 kernel이 실행하는 mode, 후자는 user mode가 실행하는 모드

 

* Kernel서만 실행해야 하는 명령어가 있고, User가 실행해야 하는 명령어가 있다.

Kernel mode의 명령어는 운영체제가 실행해야 하는 명령어다: previleged instruction

시스템에 치명적인 영향을 미칠 수 있는 명령어이므로 user가 함부로 실행할 수 없도록 해야한다.

Kernel과 User 둘 다 실행가능한 경우는 없다.

 

Set value of timer: Kernel (사용자가 무한대로 설정해 CPU를 무한히 할당받을 수 있다)

Read the clock: Users (그냥 읽기만 하는 거라 상관 없음)

Turn off interrupts: Kernel (Device로부터 데이터를 못 받게 될 수 있다)

Access I/O device: Kernel (I/O는 반드시 kernel을 거쳐서 데이터를 주고 받아야 한다)

Issue a trap instruction: User (System call을 발생시키는 건 사용자의 몫)

 

* 왜 Trap 발생 명령어는 User mode에서 실행돼야 할까?

Disk에 데이터를 쓴다고 하자.

이 경우 사용자가 직접 쓰는 게 아니라 사용자는 운영체제에 요청(syscall)하고 운영체제가 데이터를 쓰게 된다.

즉 System call을 발생하면 S/W interrupt(trap)이 걸리고, 운영체제는 데이터를 쓰게 되는 것이다.

그래서 System call은 User mode에서 Kernel mode로 바꾼 후 작업이 끝나면 다시 User mode로 바꿔야 한다.

 

실제로는 8가지의 모드가 있는 경우도 있고, mode bit에 설정된 mode와

 

 

User mode -> Kernel mode (System call)

Transition from User to Kernel mode

 

OS는 무슨 작업을 수행하는가

- 하드웨어 관리

- 실행 환경 제공

- 프로세스 관리

- 메모리 관리

- 저장장치 관리

protection and security

 

 

1) 프로세스 관리

프로세스는 '실행 중인 프로그램'

-> 프로그램: passive entity

process: active entity

-> 프로세스를 위한 자원: CPU, memory, I/O, files, 초기화 데이터,

프로세스 실행이 끝나면 이 자원들이 release되어야 한다.

Multi-thread system의 경우 thread 당 하나의 Program counter를 갖는다.

 

일반적으로 시스템은 많은 프로세스를 갖는다. 이 프로세스를 사용자, OS가 하나 또는 여러 개의 CPU를 할당받는다.

운영체제가 이 프로세스 중 하나를 골라 CPU를 할당한다.

 

- 프로세스 생성 및 삭제

- 프로세스 중지 및 재실행

- 프로세스 실행 동기화

- Communication

- Deadlock handling

 

 

2) 메모리 관리

프로그램 실행을 위한 첫 번째 작업은 프로그램을 메모리에 적재하는 것

 

- 여러 개의 프로그램이 메모리에 올리기 위한 여러 작업을 수행한다.

- 메모리의 어느 부분이 사용되고 있으며 어느 부분이 가용한지에 대한 정보를 저장한다.

- 필요할 경우 프로세스의 데이터 중 일부를 swap out/in 한다

- 프로세스 실행을 위해 메모리 할당

 

3) 저장장치 관리

기본 단위: file

Low level 에서의 file: Disk block의 모음

High level에서의 file: data가 저장된 연속된 공간

 

4) Protection and security

- Protection: File access conrtol: User ID, Group ID

- Security: User authentication(ID/password)

 

 

 

Summary

- 운영체제는 하드웨어를 관리하는 소프트웨어

- 운영체제는 인터럽트에 의해 움직인다

- 인터럽트는 SW(Trap)와 HW 두 가지가 있다.

- Dual mode: Mode bit과 명령어의 모드가 맞을 때만 명령어 실행

  Timer: 일정 시간이 지나면 Interrupt

- Mutiprogramming VS Timesharing

Multiprogramming Timesharing
Job이 끝나면 다른 Job에 자원을 넘긴다 일정 시간이 지나면 다른 Job에 자원을 넘긴다
-> 대화형 시스템
한 Job이 시스템 자원을 독점하는 것을 막는다

 

 

 

 

 

 

 

'강의노트 > 운영체제' 카테고리의 다른 글

[운영체제] 2주차 (3)  (0) 2021.03.14
[운영체제] 2주차 (2)  (0) 2021.03.13
[운영체제] 2주차 (1)  (0) 2021.03.12
[운영체제] 1주차 (3)  (0) 2021.03.08
[운영체제] 1주차 (1)  (0) 2021.03.05