본문 바로가기

반응형

컴퓨터공학/운영체제

(12)
가상메모리의 이해 - 페이징 기법 virtual Memory 4GB를 physical Address 로 바꾸기 위해서 가장 흔히 쓰는 페이징 기법에 대해 소개한다. 페이징의 공간은 4KB, 128MB, 1GB 다양하게 쓰지만 리눅스에서는 고정적인 4KB를 사용한다 가상 메모리에 4KB 마다 각각의 페이지 번호를 두고 해당 페이지가 사용되면 실제 메모리에 할당되어 쓰인다 만약, 2KB 만 남게되도 나머지를 공란처리하고 고정적인 4KB로 맞춘다 페이징 테이블은 가상메모리 페이징의 번호에 따라 페이징 가상주소, 물리주소가 담겨있는데 이것은 프로세스 PCB에 있다.(프로세스 PCB에 있으니 실질적으로는 메모리에 있다는 말이다) 페이지번호 가상주소 물리주소 page1 000000h 0000h page2 000005h 0005h page3 0000..
가상메모리 프로세스는 4GB의 공간을 가지게 된다. 하지만 여러개의 프로세스가 있으면 4GB x 개수 만큼되므로 실질적으로 이 공간을 다 메모리에 할당하는 건 불가능하다. 그렇기 때문에 나온 방식이 가상메모리이다. 프로세스를 실행하면 가상메모리의 모든 공간을 다 쓰는것이 아니다 부분적으로만 쓰다보니 여러개의 프로세스는 실제 메모리에 사용하는 영역만 할당하여 쓰게 되면된다 이 기법은 여러가지 기법이 있는데 차후 포스팅에 참고하면 되겠다. CPU와 RAM 사이의 가상메모리, 실제메모리 주소를 빠르게 변환시켜주기위해 MMU의 하드웨어 장치가 있다.
교착상태와 기아상태 교착상태 (DeadLock) : 두 개 이상의 작업이 서로 상대방의 작업이 끝나기 만을 기다리고 있기 때문에, 다음 단계로 진행하지 못하는 상태 임계 자원 A와 B가 있다고 가정해보면, Thread A에서 lock.Acquire(B)를 실행하기 위해 대기하는 상태이고 Thread B에서 lock.Acquire(A)를 실행하기 위해 대기하는 상태라고 하면 서로 자원을 쓰기 위해 계속 대기하게 된다 이렇게 무한정으로 대기하는 상태를 교착상태라고 한다 // Thread A lock.Acquire(A) A 실행 lock.Acquire(B) B 실행 lock.Release(B) lcok.Release(A) // Thread B lock.Acquire(B) B 실행 lock.Acquire(A) A 실행 lock.R..
세마포어 38장 세마포어 다중 스레드는 공유된 데이터를 같이 접근할 수 있다록 보니 작업들 사이에 실행 시기를 맞추는 동기화 작업이 필요로 한데 이것을 처리하는 방법이 다른 스레드가 접근하지 못하도록 Mutual exclusion(상호 배제)가 필요하고 공유 변수에 대해서는 Exclusive Access가 필요한다 파이썬에서는 lock.acquire() / lock.release() 이런 형태로 구현 lock.acquire() ... lock.release() 이렇게 소스가 있으면 A,B,C,D 스레드가 있다고 할 때 A 스레드가 acquire()를 실행하고 임계영역에 접근한 뒤 release가 될때까지 다른 스레드는 acquire()문에서 대기한다 lock.acquire() ~ lock.release() 사이의..

반응형