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이라고 하던게 지금까지 이어져 옴
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)
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 |