본문 바로가기

23년 1학기 학교공부/운영체제및실습

[OS] 메모리 관리

목차

    728x90
    반응형
    SMALL

    운영체제가 컴퓨터 메인 메모리를 관리하는 방법에 대해 알아보자.

    메모리 관리 방법에는 다섯가지가 있다.
    1. 고정분할식 메모리 할당방법
    2. 가변적으로 그때그때 필요한 만큼 메모리를 할당하는 다이나믹 파티셔닝
    3. 버디 시스템
    4. 펜싱
    5. 세그멘테이션


    메모리 관리의 기능은 크게 두가지가 있다.
    1. 메모리 할당
    프로그램을 실행하려면, 프로세스를 메인 메모리에 넣고 실행해야한다. 즉 먼저 프로세스에게 메모리 공간을 분배해주고, 분배한 메모리에 프로세스를 집어넣어줘야하는 것이다.

    위 그림에서 메인 메모리의 회색 부분이 운영체제이고, 그 밑에 사용자 프로세스들이 들어가는데, 프로세스 a를 위해 5000번 byte부터 프로세스 a의 크기만큼 메모리를 배분해줘서 여기에 프로세서 a의 이미지를 넣는것이다.
    그런 이후 cpu가 프로세스 a의 인스트럭션을 가지고 실행할 수 있다.

    같은 방식으로 b, c도 실행을 하기 위해서 메모리에 빈 공간을 잡아서 넣어줘야한다.

    이런식으로 메모리 영역을 분할해서 각각 여러 프로세스들이 들어가게끔 해주는것이 memory allocation 문제이다.

    2. 메모리 보호
    메모리를 할당한 후 그림처럼 a, b, c 세 프로세스가 메모리에 들어왔다고 가정하면, 이 영역들을 보호해주어야한다.
    만약 보호하지 않고 b가 마음대로 c 영역에 들어가서 변수 값을 바꾼다거나 메모리 내용을 지워버린다던가 하면 c는 정상적으로 동작할 수 없을 것이다.
    이런 일이 생기지 않도록 프로세스가 자신이 허용된 영역만 접근하는지 금지된 영역을 접근하는지 감시하는 역할을 memory protection에서 한다.

    만약 금지된 영역에 접근하면 운영체제에게 알려서 이에 대한 후속조치를 취한다.
    대부분의 경우에는 운영체제가 그 프로세스의 실행을 중단시킨다.

    프로세스를 구성하는 인스트럭션을 하나하나 실행하면서 허용된 메모리로 가는지를 검사하는데, 이런 검사는 프로그램 실행 전에는 알 수 없다. 유일한 방법은 인스트럭션을 실제로 실행하는 과정에서 cpu, 즉 하드웨어가 알아내는 것이다.



    메모리 관리 기능에서 중요한 두가지 개념이 있다.
    1. Relocation
    location을 다시 잡아준다는 의미이다.
    프로세스 a가 5000byte부터 7000byte까지 할당되어있다고 가정하자.
    이 위치를 다른 곳으로 이사를 보내는것이다.

    relocation이 발생하는 예시는 swaping, compaction이 일어나는 경우이다.
    메모리 공간이 부족할 때 메인 메모리에 들어있던 프로세스를 잠시 보조기억장치로 옮기고 suspended상태로 바꾼다. 이후 나중에 메모리 공간이 생기면 다시 갖고 들어오는 것이 swaping이다.
    메모리가 부족해서 나간 프로세스를 나중에 다시 메모리로 갖고 들어올 때, 원래 있던 자리로만 들어올 수 있다고 제한하는 것은 비효율적이다.
    꼭 이전에 있던 자리가 아니더라도 빈 공간에 들어가서 실행되면 된다. 이때 필요한 것이 relocation이므로, swaping때 relocation이 제공된다면 효율적이다.

    콤팩션은 메모리 조각 공간을 모으는것이다.
    사용되지 않는 작은 메모리 조각 공간들을 모으면 큰 공간이 된다.
    조각 모음을 위해 프로그램들을 위로 밀어버리면, 메모리 조각 공간이 밑으로 합쳐져서 큰 빈 공간이 만들어질것이다.
    이런 식으로 빈 공간을 하나로 합치려면 이미 들어있던 프로그램의 relocation이 필요하다.

    2. Sharing
    두 개 이상의 프로세스들이 같은 메모리 영역을 접근하도록 권한을 부여하는 것이다.
    일반적으로 프로세스는 다른 프로세스에게 할당된 메모리 영역에 접근할 수 없다. 위에서 말했던 메모리 프로텍션 기능에서 운영체제가 감시한다.
    하지만 프로세스는 운영체제에게 shared memory라는 공유 메모리를 할당해달라고 요청할 수 있다.
    보통은 아무 프로세스가 같이 사용하는것이 아니라, 부모 프로세스가 공유메모리를 만든 후 자식 프로세스를 만들면 부모와 자식이 함께 사용하도록 허용된다.
    이때 두 프로세스가 shared memory 영역으로만 가도록 허용해야지, 원래 고유한 서로의 메모리 영역에 접근하는 것은 안된다.

    728x90
    반응형
    LIST