운영체제 이론 6편

Owon·2023년 8월 24일
0

운영체제 이론

목록 보기
6/8
post-thumbnail

교착상태

교착상태는 다음 흐름으로 진행이 안되는 흐름이 죽어있는 상태를 말한다. 교착상태가 걸리는 이유는 임계구간 과정 중 자원을 wait하게되는데, 외부의 어떠한 프로세스에서 해당 자원을 선점하고 있다면 상호 wait하는 루프가 만들어지고, 이때부터 교착상태가 형성된다. 어떤 영역이든 의존관계에서 순환구조가 나온다면, 그건 매우 위험한 구조다.
사실상 교착상태가 쉽게 일어나지 않는다. 한 프로세스 내에서 두개의 스레드가 교착상태에 빠지지 않을지 제 3의 스레드를 이용해 상태감시를 해주면 된다. 교착상태의 대응방식으로 하나의 스레드를 terminate하고 재실행해주는 방식도 있다. 스레드 뿐 아니라, OS의 단위에서도 똑같은 과정이 일어난다. 여러개의 프로세스가 동시 동작하는데, 특정 프로세스가 특정 자원을 차지하고 suspense 상태로 전환이 됐다면, 운영체제에서 이를 감지해서 강제적으로 해당 프로세스를 종료하고, 강제회수한 자원을 필요한 프로세스에게 전달한다. 사실상 프로세스의 메모리는 가상화를 해두기 때문에, 프로세스의 terminate는 가상화 메모리로 적용되어 있는 부분을 날리는 형식으로 실행하면 된다.

메모리 관리

메모리에는 1차메모리(RAM)과 2차메모리(SDD,HDD)가 있다. 메모리의 주소는 일련번호라고 생각하면 된다. 32비트 체계는 2^32 의 주소 메모리를 통제할 수 있다. 그래서 RAM을 8기가를 장착을 해도, 최대 4기가 밖에 운용할 수 없는 현상이 일어날 수 있다. CPU의 연산속도가 빠르지만, 그렇다고 모든 작업이 대기상태가 없거나 대기상태가 너무 길어서도 좋지는 않다. 결국엔 속도 또한 자원의 일부이기에, Cache 예측과 같은 특성을 이용해, CPU가 꾸준히 일을 할 수 있도록 하는 것이 중요하다.
메모리 관리자가 메모리 사용의 배치 작업을 수행해준다. RAM이라는 공간은 한정되어있지만 그 위에서 작동해야되는 프로세스가 여러개 존재한다면, 배치정책을 이용해야한다. 프로세스의 상태를 감시하면서, 사용되지 않는 데이터는 HDD로 저장소를 옮기는 식으로 배치정책을 실시한다. 페이지 단위 메모리로 통제하게 되어있고, 페이지는 보통 4KB로 이뤄져있다.

절대주소와 상대주소

메모리의 주소를 얘기할 때는 두 가지 형식이 있다. 운영체제를 포함해서 주소를 가르키면 절대주소, 유저의 위치를 기준으로 재설정 한 후 주소를 가르키면 상대주소다. 절대주소와 상대주소는 가상메모리를 이해하기위해 알아야하는 기본적인 개념이다. 프로세스의 메모리를 회수하고 새로운 프로세스의 메모리 공간을 동적할당하는 과정에서, 프로세스 매니저가 메모리 할당에 대한 고민을 해결해준다.

메모리 오버레이와 스왑

프로그램의 메모리 크기가 실제 메모리 크기보다 클 때 메모리를 쪼개서 운용하는 방식을 메모리 오버레이라고 한다. 옛날에 RAM의 크기가 작았을 때 자주사용된 개념이다. HDD에 스왑영역을 설정하고, RAM의 영역과 더하여 실제 컴퓨터가 사용하는 메모리 공간이라고 이해할 수 있는데, 이런 방식은 가상메모리 운용과 밀접한 관계가 있다. Swap In/Out이라는 용어는 Page In/Out이라는 용어와 비슷한 개념인데, RAM과 HDD사이에서 일어나는 메모리 전환 과정을 표시한다.
최대 절전모드로 들어가면, RAM메모리에 있는 모든 정보를 HDD에 전환시켜준다, 그럼 모든 작업 상태를 저장할 수 있고, 다시 전원을 켰을 때 HDD -> RAM 과정을 거쳐 상태를 복구한다. SSD가 HDD보다 좋은 성능을 내는 이유는, Swap out에 대해서 속도를 몇배 올릴 수 있어서, CPU를 교체하지 않아도, I/O 지연을 줄여줘서, 컴퓨터 성능이 향상되는 현상을 경험할 수 있었다. 그래서 CPU대신 SSD로 컴퓨터 메모리 장치를 교체하여 성능향상을 하던 시절이 있었다고 한다.

(물리) 메모리 분할 방식

가상메모리 보다는 중요하지 않을 수도 있지만, 물리적으로 어떻게 메모리 분할이 진행되는지 알아보도록 한다. 프로그램에서 물리 메모리를 사용하는 경우는 S/W(기계어)를 잘라서 CPU연산이 진행될 때다. 프로그램이 동시에 여러개가 작동할 때 프로세스화되어 진행이 되는데, 프로세스를 각각에 연속되는 공간으로 메모리 할당을 해줄 때, 가변 분할 방식과 고정 분할 방식이 있다. 가변 분할 방식을 사용할 땐 빈 공간(Fragment)가 발생한다. 물리적인 메모리 분할은 위의 두가지 방식을 섞어서 사용한다. 관리측면에선 고정 분할 방식이 훨씬 쉽다.

가변분할을 사용하게 되면, 빈공간이 많이 생겨 조각모음을 진행해야되는 단점이 있다. 이를 외부 단편화라고 표현한다. 조각모음을 하는 행위 자체는 빈 공간을 창출해 메모리를 추가적으로 확보할 수 있지만, 이 또한 CPU 자원을 잡아먹기 때문에, 무조건 좋다고 할 수는 없다. SSD는 HDD와 다르게 어느 섹터를 접근하든 같은 속도로 접근하기에 조각모음을 하지 않는 편이다. (해둬서 나쁘진 않다)
다음 글 부턴 가상메모리에 대해서 정리하도록 한다.

profile
공부한 내용들을 정리하는 저장소입니다.

0개의 댓글