카테고리 없음

[혼공컴운] 6주차

이서찬 2025. 2. 22. 20:20

5주차까지 배운 내용을 간략하게 정리해보자. 

5주차에 우리는 앞서 배웠던 운영체제가 하는 주요 업무들에 대해 알아보았다.

CPU스케줄링을 통해 cPU가 수행할 업무들의 적절한 순서를 배치할 수 있었고

공유 자원 문제를 해결하기 위해 뮤텍스 락 등의 기법등이 개발되었으며

프로세스들이 서로의 자원을 차지하면서 교착상태에 빠지게 되는 문제가 있음을 배우고 이에 대한 해결 방법으로 오름차순 자원 할당을 고안했었다. 

 

14) 연속 메모리 할당

프로세스들이 요구하는 메모리 크기가 실제 메모리의 물리적 크기보다 클 때 스와핑이라는 작업이 이루어진다.

스왚인은 메모리에 빈 공간이 생겼을 때 자원을 들여오는 것. 

스왚아웃은 메모리에 빈 공간이 없는데 추가적ㅇ니 프로세스가 실행될 필요가 있을 때 우선순위를 고려하여 일부 프로세스를 메모리에서 보조기억장치로 옮기는 작업을 일컫는다. 

 

스와핑은 메모리의 크기에 비해 실행시켜야 할 프로세스가 여럿이어서 넘칠 때 실행되는 작업이고

그렇지 않을때는 최적의 방식으로 메모리를 할당시키는 것이 중요할 것이다. 

메모리에 어떻게 프로세스를 할당시켰는냐에 있어 최적 적합 최초적합, 최악적합으로 분류할 수 있다.

최초적합은 빈공간이 보이자마자 프로세스를 할당시키는 것. 최적적합은 메모리 할당이 가능한 빈공간 중에서도 가장 작은 크기의 공간에 프로세스를 할당시키는 것이다.

하지만 이러한 메모리할당 방식은 외부단편화라는 문제를 야기한다. 외부단편화란, 프로세스가 할당되고 빼지는 과정이 반복되면서 다른 프로세스를 할당하기 어려울 정도로 작은 여러 메모리 공간들이 생기면서 효율적으로 활용하지 못하는 문제를 일컫는다.

마구잡이로 데이터를 할당해가면 언젠가 할당하기 어려운 빈 공간들이 생길 것이다. 크기가 제각기 다른 돌들보다는 벽돌로 벽을 세워보는 것은 어떨까?

 

외부단편화를 그렇다면 어떻게 해결하면 좋을까?

1. 메모리 압축 : 여기저기 흩어져 있는 빈공간들을 합치는 방식이다. 문제는 이러한 작업이 각종 프로세스를 실행되는 중에 이루어져야 하기 때문에 각종 문제를 일으킬 수 있다는 것이다. 어떻게 프로세스를 실행하는동시에 그 프로세스에 해당하는 메모리들을 시의적절하게 이사시키냐는 것이다.

2. 페이징 : 프로세스의 논리 주소 공간을 페이지라는 일정한 단위로 자르고 메모리의 물리 주소 공간을 프레임이라는 일정한 크기 단위로 자른 뒤 페이지를 프레임에 할당하는 방식. 메모리 할당의 문제는 작은 메모리 공간을 썼다가 이후에 재활용하고자 할 때 새로운 프로세스의 크기가 충분히 크지 않아, 즉 크기가 상이하여 생긴 문제였기에 페이징은 프로세스와 메모리를 모두 같은 크기 단위로 자르며 문제를 해결하는 것이다. 

 

페이징은 하나의 프로세스가 메모리 여기저기 흩어져 있게 될 수 있다는 문제가 있다 .이러면 CPU가 프로세스가 중간에 끊겨있어도 다음 부분이 어디있는지 찾아가야 되는 문제가 생기기에 어떤 메소드로 이러한 문제를 해결할지가 관건이 된다. 페이지 테이블은 페이지가 몇 번 프레임에 할당되어 있는지를 정리한 기록으로, 어디 프레임에 프로세스의 메모리가 저장되어 있는지를 CPU가 알게되면서 연속적으로 프로세스를 실행할 수 있게 된다.

이렇게 페이지 테이블도 있음에도 페이징도 약간의 효율 이슈가 있을 순 있다. 한 가지 예로 내부 단편화가 있는데, 프로세스를 페이지로 쪼갠 뒤에 남는 부분을 할당하면 프레임 내에 빈공간이 생기게 되는 현상이다. 물론 외부 단편화에 비하면 규모가 미미하다.

 

*페이지 테이블의 위치와 저장 정보*

페이징 방식의 문제는 페이지 테이블에 접근하고 메모리에 접근해야 되면서 늘어나는 작동 시간에 있다. 

이 문제를 해결하기 위해 CPU 근처에 페이지 테이블을 저장하고 있는 캐시 메모리를 위치시키는데 이를 TLB라 한다.

논리주소는 페이지 번호와 변위로 이루어져 있다. 이 페이지 번호와 변위를 알고 페이지 테이블에 접근하면 페이지 번호에 해당하는 프레임 번호까지 알 수 있기에 CPU는 메모리 내의 원하는 프로세스에 접근할 수 있게 된다. 또한 페이지 테이블은 현재 메모리에 해당 프로세스 페이지가 가 저장되어 있는지 여부를 저장하고 있는데 이를 유효비트라 한다. 

 

이제 우리는 중요한 문제에 다다르게 된다. 그래서 어떤 페이지를 프레임 내로 가져와야 되는가?

*페이지교체 알고리즘*

페이지 폴트는 원하는 물건을 찾으러 친구 집에 찾아갔는데 그 물건이 없다는 답변을 듣게 되는 순간과 유사하다.

페이지 교체 알고리즘에는 다음과 같은 대표적인 기법들이 있다. 좋은 페이지 교체 알고리즘이란 페이지 폴트, 즉 메모리에 원하는 페이지가 없는 불상사가 가능한 한 적게 발생하는 알고리즘이라는 점에 유념하며 살펴보자.

1. 선입선출 페이지교체 알고리즘: 오래된 페이지를 내쫓는다. 

2. 최적 페이지 교체 알고리즘: 페이지 폴트 발생 횟수에 있어 이상적인 하한선이다.

3. LRU 페이지교체 알고리즘: 가장 오래 사용되지 않은 페이지를 내쫓는다. 

 

페이지 교체는 정말 적합하게 이루어져야 하는데, 이 페이지 폴트가 너무 빈번하게 일어나게 되면 스와핑 시간이 실제 메모리에 있는 프로세스를 CPU가 실행하는 시간보다 길어질 수도 있기 때문이다. 이러한 현상을 스레딩이라 부르며, 이 스레딩을 막기 위해 각 프로세스에 그동안 실행되어온 페이지 개수에 비례해서 페이지를 할당해 주는 등의 기법을 사용하게 된다.

 

 

15) 파일과 디렉토리

파일은 보조기억장치에 있어서 메모리 덩어리를 구분시켜놓은 것. 

디렉토리는 파일의 일종으로 파일이나 다른 디렉토리를 포함하며 계층 구조를 갖게 된다. 

그렇다면 각종 저장내용들은 어떻게 디렉토리, 파일에 할당될까?

연속할당은 파일을 연속적으로 기억장치에 저장해놓는 방법이다. 

하지만 연속할당은 그것이 이루어지고 난 후 어떤 파일이 삭제되었을 때 그 빈공간을 활용하기가 어려워질 수 있다는 문제를 갖고 있다. 

이 문제를 해결하기 위해 연결할당으로 데이터가 저장된다. 각 블록의 일부에 다음 불록의 데이터 주소를 저장하여 불록을 연속적으로 읽는 효과를 가질 수 있다. 물론 연결할당도 첫 번째 블록부터 읽어야 하는 단점, 오류 발생시 해당 불록을 읽기 어려울 수 있다는 문제가 있다. 이러한 문제를 해결하기 위해 색인할당이 활용된다. 색인 할당에서는 하나의 파일, 디렉토리에 해당하는 불록이 차례로 무엇무엇인지를 기록해놓은 색인용 불록을 지정하고 이를 활용하는 방법이다. 이러면 임의로 원하는 불록을 찾아가는 것이 편해진다. 

 

 

숙제

1. 최초로 발견한 빈 공간에 프로세스를 적재 - 최초 적합
2. 적재될 수 있는 가장 큰 공간에 프로세스 적재 - 최악 적합
3. 적재될 수 있는 가장 작은 공간에 프로세스를 적재 - 최적 적합

 

으로 짝지을 수 있다!!!!!!!!!