본문 바로가기

별걸다하는 IT/운영체제 OS

[운영체제OS]Memory Management 메모리 시스템(메모리 관리 목표)

반응형

Operating System Chapter 8 

Memory Management Strategies 메모리 관리

오늘은 본격적으로 메모리 관리 파트에 들어가기 전에, 하는 소개 및 잡담? 및 개요? 정도의 포스팅이예요.


우리 운영체제가 하는 게 컴퓨터 하드웨어 자원을 관리하는 건데 

컴퓨터 하드웨어가 대표적으로 CPU, Memory, I/O가 있다고 했죠

그래서 OS가 하는 일이 CPU관리, 메모리관리, I/O관리예요.


We showed how the CPU can be shared by a set of processes. 

As a result of CPU scheduling, we can improve both the utilization of the CPU and the speed of the computer;s response to its user. 

지난 포스팅 동안 (?) CPU가 어떻게 잘 배분되서 사용되는지 살펴봤고

CPU 스케줄링 더분에 우리는 CPU의 성능과 반응 속도 둘 다 극대화 할 수 있었죠 

CPU관리에 대해서는 지금까지 쭈우욱 살펴봤고 오늘부터는 메모리 관리에 대해서 얘기하려고 합니다 :)


운영체제의 목적이 

1. 프로그래머가 하드웨어를 몰라도 쉽게 하드웨어 자원을 잘 활용할 수 있게끔 하는 거랑

2. 효율적으로 사용하게끔 하는거

라고 했었죠?! 


메모리관리는 운영체제가 정말 메모리를 잘 몰라도 쉽게 프로그래머가 할 수 있도록 관리를 해주기 때문에 메모리 관리에 대해서는 여러분들이 거의 잘 모른다고 해도 과언이 아닙니다.


CPU관리에 대해서 배우기 전에도 사실 스레도, 프로세스 이런거는 많이 들어봤을 거예요

동기화, 세마포어, lock이런거는 못들어본 사람들이 있었을지도 모르지만 그래도 프로그램을 좀 많이 접했다 하는 친구들은 한번쯤 들어봤을 텐데 메모리관리는 아마 공부하지 않았으면 대부분 잘 모를겁니다.

그래두 제가 배운걸 토대로 더 쉽게 풀어서 포스팅을 할 수 있도록 노력할테니 열시미이~~~목차부터 차근차근 공부해봅시닿ㅎ 이거 은근 수입은 진짜 거의 없으면서 하나하나 올리는데 시간 엄청 잡아묵는다고요 ㅠ 


메모리 관리의 목표!


프로그래밍을 할 때 쉽게 메모리를 사용할 수 있도록 abstraction을 제공해주는 것! 

운영체제의 목적이라 했는데 메모리도 당연히 그거에 해당되겠죠 ㅎ


또 운영체제의 두 번째 목적이 자원을 효율적으로 관리해주는 거라고 했어요 

메모리 자원은 한정되어 있잖아요  --> scarce memory resources 


자, 여러분 PC에다가 램을 4기가, 8기가 이렇게 꼽는데, 실제 그 위에서 돌아가는 프로세스가 (프로세스가 램 위에서 돌아간다고 했죠?)

게임을 예로 들어봅시다. 예를 들어서 어떤 게임 하나 만드는데 내 컴퓨터는 8기가인데 이 프로그램을 돌리려면 메모리가 10기가 있어야 해. 그래도 돌아갈 수 있도록 운영체제가 방법을 제공해줍니다. 두 번째 문장이 말하는게 이거예요


To allocate scarce memory resources among competing processes to maximize performance with minimal overhead

적은 오버헤드로 성능을 최대한 이끌어낼 수 있도록 프로세스들 사이에서 부족한 메모리 자원을 적절히 잘 할당하는 것


구냥 저렇게 어렵게 써놓은거지 제가 예시로 든 것을 말하는구나 생각하면 됩니다. 

어떻게 8기가밖에 없는데 10기가짜리 프로그램을 돌리는거지? 이걸 우리가 앞으로 메모리관리에서 배울거에요.


그 다음 세번 째 목표

To provide isolation between processes

프로세스들 사이에서 isolation을 제공한다?


이게 무슨말일까요 즉 Memory Protection을 한다는 뜻입니다.

메모리 관리 중에서 가장 중요한 것중 하나가 메모리 보호죠.

다른 프로세스가 내 메모리 영역을 침범하지 못하도록 막아주는 게 운영체제가 제공해야 하는거고 그래서 memory management의 목표가 다음과 같은 겁니다 


잠깐!! 다른 사람들에게 도움이 되고자 올리는 정보 공유 블로그예요

공지와 목차를 이용해서 비전공자들에게도 전공자들에게도 하나의 과목을 글로 수월하게 이해할 수 있게 하려고 합니다.

한 글을 쓸 때 시간이 많이 들더라도 정성을 다해 쓰려고 해요. 광고 많은 거 싫어할까봐 하나만 붙이려고 하는데 하나만 붙이니까...자동으로 페이지에 아무데나 몇개씩이나 들어가네 ㅠㅠ 



메모리 관리가 생긴 시점? 역사?



예전에 컴퓨터 역사에 대해서 포스팅한 적이 있어요 

그 때 Batch 프로그래밍 시절에는 메모리 관리가 별로 필요 없었습니다.


왜냐!

OS loads job, runs it, unloads it

- 하나 올려놓고 그 프로세스가 다 수행되고 나면 다른 프로세스 올리고 하는게 Batch System이니까요

그러니까 메모리 관리라고 할 게 별로 없었어요 


하지만 그 후에 multiprogramming 멀티프로그래밍이 되면서 

Need multiple processes in memory at once.

여러 개의 프로세스가 메모리에 올라가게 되니까 메모리 관리가 중요해졌죠


저 사진은 그런 내용들을 얘기하는 겁니다.

그러면서 요구 사항(Requirements)이 발생하는데 


메모리 Protection 해줘야 하고 fast translation이라고 해서 이거는 좀 진도가 나가야 이해가 될텐데

메모리를 내가 참조를 해줘야 하는데 메모리 주소의 변화를 아주 빨리 진행을 해야 한다 대략 이런내용(?)입니다

Context Switching까지도 overhead 최소화하게 메모리 관리를 해줘야한다~~ 

이런 이슈가 나왔다는 거예요


결국 Multiprogramming 시절부터 memory management에 대한 개념이 나왔고 쭈우욱 그거에 대한 방법들이 나왔다.

지금 현재 우리가 사용하는 기법도 사실은 1960년대 70년대 초반에 정립이 된거예요.

지금까지 쓰이고 있으니 아주 오래됐죠?! ㅎㅎ

여러분들이 분명 만든 데이터를 메모리에 저장하고 읽어와서 작업을 하는데 어떻게 진행되는지 신경안써도 돼죠? 운영체제 덕분이야요~~


그러면서 지금 현대 60년대 후반 70년대 초에 다 정리가 된 것이 Virtual Memory인데 

이것들에 대해서는 앞으로 8장하구 9장을 걸쳐서 살펴볼거예요 (운영체제 목차를 참조하시오 ~


운영체제 메모리 시스템 개요 끝~!






반응형