0. 운영체제를 공부해야 하는 이유?
- CS의 여러 과목의 최고봉이다!
- 스마트폰, 자동차, 가전제품에서도 활용됨
- 다른 소프트웨어를 배우는 데에도 적용할 수 있음
📌 이 강좌에서 배울 것
- OS가 제공하는 것들
- 기능과 내부구조
- CS적인 이론이나 방법
- 결과적으로 OS의 내부 구성을 잘 알수 있다
✍ OS의 진화과정
- 당시 컴퓨터 시스템을 운영하는 사람들의 목적은 비싼 하드웨어를 잘 활용하는 것
- CPU의 utilization을 최대화하는 것
- 인건비는 상대적으로 저렴해 인건비는 고려하지 않음
- 사실 OS라는 것이 존재하지 않았음. 사람이 OS의 역할을 했음
- 사람이 오르골 펀칭뚫듯 입력을 하면 컴퓨터가 처리하는 원리
- 빛을 쏘인 다음에 그 패턴을 보고 값을 읽어드림
Operator의 역할
- 사용자로부터 카드 덱을 수령
- 카드 덱을 컴퓨터 시스템에 로딩하고 수행
- 수행 결과를 프린터로 출력
- 출력한 결과물을 사용자에게 전달
=> 이걸 다 사람이 했음
- 사람이 해서 너무 비효율, 이를 극복하기 위해 batch monitor이라는 것을 만들었다.
- 여러 개의 카드 덱을 하나의 테이프에 기록하고 컴퓨터 시스템은 이 테이프 안의 잡을 순차적으로 수행하며 operator의 느린 job-to-job 속도 문제 해결
- 좀 더 높일 수 있는 방안은 없을까? => IO체널
- cpu는 커멘드만 IO체널에 전달해주고 자기 할일을 하면 됨. 인터럽트 등장 async하게 진행
Batch Monitor의 한계
- 비동기적 I/O의 경우에는 CPU utilization을 높일 수 있지만, 동기적일 때는 여전히 CPU가 다른 작업을 수행할 수 없기 때문에
효율성이 떨어짐
멀티 프로그래밍
- 컴퓨터 시스템이 한번에 하나 이상의 active job을 가지고 있다 => 수행은 시작, 종료는 안한 job
- degree of multiprogramming : 현재 진행되는 멀티프로그래밍의 개수
Multiprogrammed Batch Monitor의 등장 배경과 새롭게 대두된 문제들
등장 배경 : 동기적 I/O로 인한 CPU utilization 저하 문제를 해결하기 위해 Multiprogramming을 지원할 필요가 생김
문제점 : Memory Projtection Memory Relocation, Concurrent Programming
각 용어마다 정의된 내용을 잘 이해할 필요가 있다고 함
멀티프로그래밍을 하기 때문에 문제가 발생했다
문제 1 | Memory Protection
어떤 Job의 주소 사용 버그로 인해 다른 Job이나 OS의 영역을 침범함으로써 문제를 일으키는 현상
=> target memeory가 부여받은 고정 공간에 있는가를 잘 확인해야 한다
=> Job이 사용하는 메인 메모리의 시작 주소(Base Register에 저장)와 Job이 사용하는 메모리의 크기(Bound Register에 저장)을 사용해 접근하려는 주소의 Base Register과 Base Register + Bound Register 사이에 있는지를 확인
문제 2 | Relocation
코드를 짤 때 이를테면 1000번지에서 시작한다고 생각하고 짤 수 있었다.
하지만 멀티 프로그래밍을 진행하면서 특권을 가진 하나 빼고 어디서 시작하는지 알 수 없게 되었다.
=> 따라서 Job이 메인 메모리의 어느 위치에 로드될 지를 알 수 없기 때문에 임의의 주소에서도 문제없이 수행될 수 있어야 한다
따라서 사람들이 하드웨어 메커니즘을 개발함
Base register
프로그램이 로드된 시작 주소를 담고 있다.
또 모든 프로그램이 0번지부터 시작된다고 가정한다
실제 주소가 만들어질 때는 base register에있는 주소와 합쳐져서 생성된다
논리 주소(Logical Address) : 프로그램에 의해 CPU가 바로 생성하는 주소
물리 주소(Physical Address) : 일련의 변환을 거친 최종 메인 메모리 주소
문제 3 | Concurrent Programming
interactive time sharing
서버를 혼자 사용하는 것 같은 느낌
사람들이 자신의 파일을 혼자만 보는 줄 알고 사용
=> 파일 시스템을 만듦.
🤔 질문 1
이 논리 주소와 물리 주소 변환 과정을 하드웨어에서 할까 소프트웨어에서 할까?
이 MMU를 소프트웨어로 진행하면 두 가지 문제가 발생한다
성능 문제
한번 수행하려 하면 최소 한번, 많게눈 두 세번의 instruction이 수행해야하게 됨
MMU 주소 역시 또 translation 과정을 거쳐야 한다 => 재귀적인 반복문이 호출된다
따라서 하드웨어적으로 호출됨
🤔 질문 2
OS 관점에서 MMU가 도입되었다면 어떻게 해야 할까?
=> 새로운 값과 bound register을 set해야 한다
이 기능은 OS만 고유한 권한으로 수행할 수 있어야 한다
relotation이나 protection을 침범할 수 있기 때문에
'👨💻 CS지식' 카테고리의 다른 글
[ SNU 강의 ] 운영체제의 기초 | 쉽게 배우는 운영체제 5주차 (0) | 2022.07.11 |
---|---|
📢 공지 (0) | 2022.07.07 |
[ 네트워크 ] TCP/IP 네트워크 기초 상식 (0) | 2022.07.07 |
[ SNU 강의 ] 운영체제의 기초 | 쉽게 배우는 운영체제 4주차 (0) | 2022.07.05 |
[ 운영체제 ] 30분동안 안쉬고 설명하기 _ 기술노트 with 알렉 (0) | 2022.07.03 |