Operating System
OS는 프로그램이다.
OS의 역할
- application programs을 실행시키는 역할을 함
- OS가 여러 프로그램 중에서 어떤 프로그램을 실행시킬지 결정을 하고, 해당하는 프로그램이 어디까지 실행했는지 or 어디부터 실행해야 되는지를 찾아서 해당하는 프로그램 카운터 값을 CPU의 PC에 넣어줘야 어플리케이션 프로그램이 실행을 시작함.
- 따라서 OS가 없으면 어플리케이션 프로그램이 실행을 시작할 수도 없고, 끝낼 수도 없음.
- 어플리케이션 프로그램과 하드웨어 사이의 인터페이스 역할을 함.
- OS가 프로그래머들이 하드웨어 detail을 몰라도 되도록 감싸주는 역할을 함.
User/Computer Interface
아래 쪽의 회색으로 되어있는 부분 : 하드웨어 컴포넌트 (system 안에는 여러가지 하드웨어가 있음)
application program 자체도, 작성하는 user도 실제 이 하드웨어를 모름
OS는 Application program의 요청들을 실제로 system 하드웨어에서 실행시키는 역할을 담당함.
OS와 Application program 사이에 조금 진한색으로 라이브러리 함수들, 유틸리티 프로그램들이 있음
라이브러리 함수들, 유틸리티 프로그램
: application program이 직접 OS에게 무엇인가를 해달라고 요청을 하는 것 자체가 어렵기 때문에 쉽게 요청 할 수 있도록 만들어 놓은 함수들 or 프로그램들 (ex: printf, scanf)
: application program에서는 library 레벨에 있는 함수를 호출함. → I/O library 함수 안에 있는 코드 하나가 실행이 됨. (입출력을 하고싶다면) library 함수 안에서 read나 write라고 하는 system call을 호출함 → read나 write가 OS 안에 있는 함수임. 실제로 입출력을 할 수 있게 해주는 코드들이 OS안에 들어있음. 라이브러리 함수 안에 들어있는 read, write를 통해서 입출력을 함.
: user program이 직접 read, write를 사용하지 못하는 or 않는 이유 : 너무 복잡함!!
OS가 User랑 Computer 사이의 Interface 역할을 하면서 제공하는 여러가지 서비스들
Program development (프로그램 개발과 관련된 작업)
ex ) 컴파일러 ( ⇒ 없으면 프로그램 개발 불가능)
Program execution (프로그램을 실행시킴)
Access I/O devices
Application Program은 실제 I/O 작업을 할 수 없음
실제 I/O 작업은 OS안에 들어있는 read나 write라고 하는 함수에서 I/O 작업이 실행이 됨
Controlled access to files
하드디스크는 I/O device임.
파일에 access하는 것도 당연하게 I/O device를 access하는 것이기 때문에, OS가 해줌.
OS에 파일을 읽고 쓰고 오픈하고 닫고 하는 코드들이 들어있음.
System access
system안에는 중요한 자원들이 굉장히 많음. (ex. CPU ⇒ OS가 사용하는 자원이라고 생각하기)
프로그램에게 CPU를 주고, 빼앗고, …. ⇒ 이런 작업들을 다 OS가 함.
system안에 있는 모든 자원들을 다 OS가 관리를 하고, 그 자원들에 access하고 싶으면, OS에게 요청을 해야 함.
Error detection and response (오류 파악, 오류에 대한 적절한 조치)
Accounting
OS는 모든 user의 계정과 user가 실행시키는 프로그램들이 system안의 어떤 자원을 어떤 방식으로 사용하고 있는지, 어떤 자원을 사용할 권한이 있고, 어떤 자원을 사용할 권한이 없는지, 이런 것들을 전부 다 관리해줌.
⇒ 시스템 자원을 적절하게 나눠줌.
Resource Manager
OS의 두 번째 역할
OS가 다루는 컴퓨터 자원
- I/O
- Main memory
- Secondary memory (하드디스크)
- Processor execution time (CPU 시간)
주어진 자원을 최대한 잘 활용해서 최고의 성능을 내야 함 (이것이 resource manager 역할)
Kernel
- os 프로그램 전체가 main memory안에 있을 때 : OS = kernel
- 전체 OS 프로그램 중에 일부만 메모리에 들어가서 실행을 함.
- OS 전체 프로그램 중에서 항상 메모리에 들어와있어야 하는 프로그램이 있음.
- 현재 프로그램 상태를 저장하고, 다음에 실행할 프로그램 상태를 restore하고… = switching 작업. (계속 필요함) ⇒ 언제나 사용하기 때문에 항상 메모리 안에 들어있어야 함.
- 즉, 전체 OS 프로그램의 일부 코드인데, 그 일부 코드가 굉장히 중요한 코드이고, 굉장히 자주 사용이 되어서 항상 메모리에 들어있어야 하는 코드 부분.
Evolution of Operating Systems
1. Serial Processing
- OS가 없는 시스템
- 프로그램 중단 시키는 방법 모름
- OS가 없을 때는, 사람이 프로그램 하나를 메모리에 집어 넣고 실행시킴 → 끝까지 실행함 → 프로그램의 결과값을 사람이 직접 받아서 봄 → 다음 프로그램을 직접 실행시킴
2. Simple Batch Systems
- 아주 간단한 OS
- 프로그램 중단 시키는 방법 모름
- 프로그램들을 한꺼번에 메모리에 집어 넣음 → 프로그램이 끝나면 다음 프로그램으로 바꾸는 작업만 OS가 함.
3. Multiprogrammed Batch Systems
- 프로그램을 중단 시키는 방법을 알아냄.
- 메모리 안에 프로그램들을 여러개를 집어 넣음 → 프로그램을 실행하다가 필요하면 중단시킴
- 이런 식으로 프로그램을 바꿔가면서 실행을 할 수 있게 되었음
4. Time Sharing Systems
- 프로그램을 실행하다가 중단시킬 수 있는 시스템 (multiprogrammed batch system도 그렇지만 살짝 다름)
- 처음 시스템을 만들 때의 목적이 조금 다름.
Uniprogramming
프로그램이 일단 실행을 시작하면, 중간에 멈출 수가 없음. ⇒ 이러한 시스템을 유니프로그래밍 시스템이라고 함
ex : Serial Processing & Simple Batch System
한 번에 한 프로세스만 시스템 안에서 실행이 될 수 있고
실행을 하다가 I/O 작업을 하기 위해서 프로그램이 잠깐 멈추면 I/O가 끝날 때까지 CPU는 실행을 하지 않고 계속 멈춰있음
굉장히 비효율적인 시스템
중간에 멈추기, CPU 작업 상황 저장이 불가능했었음
- Run : CPU 작업
- Wait : I/O 작업
파란 박스 : 전체 사용 시간의 3.2%만 CPU 작업을 하고, 나머지 97%는 I/O 작업이 이루어지고 있다는 뜻 ⇒ 비효율적
Multiprogramming
여러 프로그램들을 동시에 메모리에 집어넣고, 프로그램들을 번갈아 가면서 실행 시키는 것을 멀티 프로그래밍이라고 함. - 멀티 태스킹
한 번에 하나 씩 실행을 시킬 때보다는 효율성이 좋음
위 그림은 Multiprogrammed Batch System임.
- Interactive한 시스템이 아님. B와 C가 얼마나 기다려야 되는지 모름.
- Batch : 많은 작업들을 한꺼번에 실행시키고 (쉬다가) 결과값을 확인하는 시스템
Time Sharing
multiprogrammed batch system 같은 경우에는 언제 다시 다음 프로그램을 실행시키는지 알 수 없음.
Time Sharing은 모든 프로세서에게 time slot을 정해놓고 작업을 함 → 내가 언제 다시 실행될 지 알 수 있음
여러 프로그램들이 동시에 메모리에 들어있음 + time slot을 바탕으로 timeout을 줘서 여러 프로그램들을 번갈아가면서 서비스를 하고 있기 때문에 system에서는 여러 구조가 interactive 하게… 나만 실행시키는구나라고 착각을 하고, 시스템을 사용할 수 있게 해주는 시스템. = timesharing system
time sharing system은 I/O 작업을 할 때도 프로그램을 바꾸고 timeout때도 바꿈
OS는 system에서 프로그램들을 실행시켜주는 것이 첫 번째 목적
Batch Multiprogramming의 목적
1. 프로세서의 이용성을 최대화함 (프로세서가 놀지 않고 계속 일할 수 있도록 만듦. 프로세서를 최대한 활용하기 위해서 만들어진 시스템)
2. reponse time을 최소화하기 위한 어떤 노력도 하지 않음
Time Sharing System의 목적
1. 응답 시간(입력을 줬을 때, 그 입력에 대한 대답을 출력해주는데 까지 걸리는 시간) 의 최소화 & 예측 가능하게 함.
2. 프로세서의 이용성을 최대화하려는 것과는 리가 멂( timeout으로 인해 불필요하게 switching을 하면서 utilization이 떨어짐)
'전공 > OS' 카테고리의 다른 글
CH03. Process Description and Control (1) (0) | 2024.04.23 |
---|---|
CH02. Operating System Overview (2) (0) | 2024.04.23 |
CH01. Computer System Overview (3) (0) | 2024.04.23 |
CH01. Computer System Overview (2) (0) | 2024.04.22 |
CH01. Computer System Overview (1) (0) | 2024.04.22 |
댓글