티스토리 뷰
※ 개요
초기에는 메모리 하나에 현재 프로그램의 코드와 데이터만 존재하였다.
시간이 흐른 후 멀티프로그래밍 시대가 오면서 메모리에 변화가 생겼다. (여러 프로세스를 가진 공유 메모리 개념)
즉, 여러 프로세스가 실행 준비 상태에 있고 운영체제는 그들을 전환하면서 실행함으로써 CPU 이용률을 증가시켰다.
시분할을 하려면 현재 프로세스를 중단하고, 중단 시점의 모든 상태를 디스크 종류의 장치(물리 메모리)에 저장하고 다른 프로세스의 상태를 탑재하여야 한다. 이때 레지스터 상태를 저장하고 복원하는 것은 빠르지만 메모리의 내용 전체를 디스크에 저장하는 것은 엄청나게 느리다.
따라서 프로세스 전환 시 프로세스를 메모리에 그대로 유지하면서, 운영체제가 시분할 시스템을 효율적으로 구현할 수 있게 해야 한다.
시분할 시스템이 대중화되면서 여러 프로그램이 메모리에 동시에 존재하려면 보호가 중요한 문제가 되었다.
※ 주소 공간 (address space)
: 실행 중인 프로그램이 가정하는 메모리의 모습이다.
- 운영체제는 각 프로세스의 데이터를 보호하는 방향으로 사용하기 쉬운 메모리 개념을 만들어야 했다. 이 개념이 주소 공간이다.
- 주소 공간은 실행 프로그램의 모든 메모리 상태를 갖고 있다.
실제로 프로그램은 물리 주소 0에서 16KB 사이에 존재하는 것은 아니다.
실제로는 임의의 물리 주소에 탑재된다.
※ 메모리를 가상화
: 운영체제가 메모리를 가상화한다고 말한다. 실행중인 프로그램은 자신이 특정 주소의 메모리(예를 들면 0)에 탑재되고
매우 큰 주소 공간(32비트, 64비트)을 가지고 있다고 생각하기 때문이다. 현실은 다르다.
※ 가상 메모리 시스템의 주요 목표 3가지
1. 투명성(transparency)
운영체제는 실행 중인 프로그램이 가상 메모리의 존재를 인지하지 못하도록 가상 메모리 시스템을 구현해야 한다.
프로그램은 자신이 전용 물리 메모리를 소유한 것처럼 행동해야 한다.
프로그래머는 메모리 주소를 신경쓰지 않아도 된다.
2. 효율성(efficiency)
운영체제는 가상화가 시간과 공간 측면에서 효율적이도록 해야 한다.
시간적으로는 프로그램이 너무 느리게 실행되서는 안되고, 공간적으로는 가상화를 지원하기 위한 구조를 위해 너무 많은 메모리를 사용해서는 안 된다.
3. 보호(protection)
운영체제는 프로세스를 다른 프로세스로부터 보호해야 하고 운영체제 자신도 프로세스로부터 보호해야 한다.
프로세스가 탑재, 저장 혹은 명령어 반입 등을 실행할 때 어떤 방법으로든 다른 프로세스나 운영체제의 메모리 내용에 접근하거나 영향을 줄 수 있어서는 안 된다. 즉, 자신의 주소 공간 밖의 어느 것도 접근할 수 있어서는 안 된다.
보호 성질을 이용하여 프로세스들을 서로 격리(isolate) 시킬 수 있다.
[정리]
가상 메모리 시스템은 프로세스 전용 공간이라는 환상을 프로그램에게 제공해야 한다. 이 공간에 프로그램 명령어와 데이터 전부가 저장된다. 하드웨어의 도움을 받아 운영체제는 가상 메모리 주소를 받아 물리 주소로 변환한다.
물리 주소는 원하는 정보를 반입하기 위하여 물리 메모리에게 전달된다.
운영체제는 많은 프로세스를 대상으로 이러한 작업을 수행하여 프로그램과 운영체제를 보호한다.
'Computer Science > OS' 카테고리의 다른 글
[OS] 멀티프로세서 스케줄링/ 단일 큐 스케줄링 / 멀티 큐 스케줄링 장단점 알아보기 (0) | 2021.02.14 |
---|---|
[OS] 스케줄링: 추첨 스케줄링(비례 배분)/ 보폭 스케줄링(공정 배분)/ 리눅스 CFS (0) | 2021.02.14 |
[OS]프로세스 개념/프로세스 API/프로세스 상태/ CPU 가상화 개념과 실습 (0) | 2021.01.23 |
[OS]운영체제란 무엇인가? What is Operating System? (0) | 2021.01.20 |
- Total
- Today
- Yesterday
- 자바빌드도구
- dynamic-project
- 정적멤버
- @functools.wraps
- nodejs
- sequelize.fn
- nunjucks
- 메이븐 저장소
- 자바스크립트Promise
- jdk
- @functools.singledispatch
- jre
- 인스턴스멤버
- 백준
- method와 function
- es6모듈
- 자바스크립트Call-back
- ES6
- yarn start
- 사용자정의예외클래스
- 클래스와객체
- java
- 객체지향개념
- 자바스레드
- 생성자필드메소드
- 익명자식객체
- 백준2206 파이썬 풀이
- os
- @functools.lru_cache
- Git
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |