해당 게시글은 서울대학교 홍성수 교수님의 운영체제 온라인 강의 내용을 보고 정리한 내용을 바탕으로 작성되었습니다.


 Multi Programming

컴퓨터 시스템이 한 번에 한 개 이상의 Active Job 을 수행시킨다는 의미이다. 여기서 액티브하다는 것은 프로그램을 수행했지만 아직 종료되지 않은 상태의 프로그램을 의미한다. 이런 Active 한 Job 들이 컴퓨터 메인 메모리에 같이 존재하여 수행하게 되는 것을 멀티 프로그래밍이라고 한다.


Degree Of M1ulti Programming

멀티 프로그래밍의 정도를 표현하며, 현재 메인 메모리에 존재하고 있는 액티브한 잡의 개수를 의미한다.


멀티 프로그래밍의 등장으로 인해 여러가지 문제점들이 제기되었다.


(1) Memory Protection

컴퓨터 메모리의 사용을 제어하는 방법으로, 모든 운영체제에서 중요한 쟁점사항 중 하나. 이는 운영체제에서 실행하고 있는 프로세스가 자신에게 할당되지 않은 영역의 메모리에 접근하는 것을 막는 것이 주된 목적이다. 


결국 어느 Job 의 주소 사용 버그로 인해서 다른 Job 이나 OS 의 영역을 침범함으로써, 문제를 일으키고 이에 대해 방지해야할 필요성이 대두되었다. 어느 Job 이 포인터를 통해서 메모리를 액세스할 때, 타겟 메모리가 해당 Job 에 부여된 고정공간에 있는지 여부를 파악해야 한다.


(2) Relocation

과거 간단한 배치 모니터에는 User Job 이 메인메모리의 특정영역에서 수행되었다. 하지만 멀티 프로그래밍에서는 임의의 메모리 위치에서 수행하게 되었고, 자신의 프로그램이 어디서 작성되고 실행되는지 알 수 없었다. 컴파일러는 프로그램의 시작주소를 어떻게 알고 Code Generation 을 할 수 있느냐가 문제로 떠올랐다. 이는 임의의 주소에서도 프로그램이 문제없이 실행되어야 함을 뜻한다.


당시에 컴퓨터 시스템을 연구하던 사람들이 하드웨어 메커니즘을 개발하였고, 그 결과 Base Register 라고 불리우는 것을 개발했다. 프로그램이 로드된 시작주소를 담고 있으며, 우리의 프로그램은 0 번지부터 수행된다는 가정아래 시행되며, 주소가 만들어질때는 Base Register 에 있는 시작주소에 합쳐서 시행된다. 이러한 작업들은 런타임에 이루어진다.


Job 이 사용하는 메인 메모리의 시작주소(Base Register 저장)와 Job이 사용하는 메모리의 크기(Bound Register에 저장)를 사용해 현재 접근하려는 주소 값이 Base Register + Bound Register 사이에 존재하는지를 확인하였고 프로그램을 작성할때는 항상 0번지에 로드된다고 가정하고 주소값들을 계산하였다. 


A Base Register And Bound Register(Rimit Register) define a Logical Address Space


Base Register 에 저장된 시작주소에 limit Register (메모리의 크기) 를 더해서 해당 프로세스가 메인메모리를 해당 크기만큼 점유하고 있음을 확인할 수 있다.


Hardware address protection with base and bound(limit) register


이제 컴퓨터 시스템에서 생성되는 주소를 두 가지로 나눌 수 있다.


논리주소(Logical Address) :

프로그램에 의해 CPU가 바로 생성하는 주소. CPU 가 보는 주소이고, 가상주소(Virtual Address)라고 부르기도 한다.


물리주소(Physical Address) :

일련의 변화를 거친 최종 메인 메모리 주소


MMU (Memory Management Unit) :

논리주소를 물리주소로 변환시켜주고 Memory Protection 을 체크해주는 하드웨어.


Dynamic Relocation Using a Relocation Register


MMU 는 하드웨어로 구현하는 것이 좋은가 ? 혹은 소프트웨어로 구성하는 것이 좋은가 ?에 대한 질문이 동영상 강의 중에 있었다. 교수의 대답은 하드웨어로 구현하는 것이 타당하다는 결론, 왜냐하면 소프트웨어로 구현하게 된다면 성능상의 문제점이 발생하게 되는데 하나의 인스터럭션 즉 명령어를 실행하게 되면 최소한 한 번 혹은 많게는 두 세번의 메모리 주소가 발생한다. 열 개 이상의 다른 인스터럭션(명령어)의 시퀀스를 구현하는 것이므로 시스템의 성능이 나빠진다는 결론. 추가적으로 MMU 역시 인스터럭션으로 구성되게 되므로, 재귀적인 호출 문제가 발생하게 된다고 한다.


OS 에서만 MMU 를 관리할 수 있는 것을 Priviledge Instruction 이라고 부른다. MMU 덕분에 프로그래머는 가상 주소 공간 상에서 프로그램을 짜게 되어 프로그램이나 데이터가 메인메모리에서 어떻게 존재하는지 의식할 필요가 없어졌다.


(3) Concurrency & Synchronization

멀티 프로그래밍 환경에서 여러 Job 들이 동시에 수행하게 되면 공유되는 자원이나 데이터들에 문제가 발생하므로 이를 해결할 필요성이 대두가 된다.


'운영체제 > 운영체제 강의 들은 것 정리' 카테고리의 다른 글

20181104 Introduction to OS 1  (0) 2018.11.04
Posted by doubler
,