본문 바로가기

o/s

DeadLock - Resource Allocation Graph 자원 할당 그래프(Resource Allocation Graph, 이하 RAG)는 각 자원들이 사용 가능한지, 할당되어 있는지, 또 어느 프로세스에게 할당되어 있는지 시각적으로 표현한 방향 그래프이다. 이러한 그래프를 통해서 현재 상황이 DeadLock상태인지 아닌지, 또 DeadLock상태라면 어디서 DeadLock상태가 발생되었는지 한 눈에 알아 볼수 있다. RAG를 그리려면 모든 노드들의 집합인 V와 연결 상태를 나타내는 집합 E가 필요하다. 여기서 V의 경우에는 프로세스들의 집합인 P와 리소스의 집합인 R로 나누어 진다. 즉 V = P U R P = { P1, P2, ... ,Pn } R = { R1, R2, ... ,Rm } E = { Pi -> Rj or Rj -> Pi } ( Pi -> Rj.. 더보기
DeadLock - DeadLock이란? DeadLock이란 프로세스가 자원을 얻지 못해 다음 처리를 하지 못하는 상태를 말한다. 예를 들어가 P1과 P2가 리소스 A,B 둘 다를 얻어야 한다고 가정하자. t1에 P1이 리소를 A를 얻고 P2가 리소스 B를 얻었다면 t2때 P1은 리소스 B를, P2는 리소스 A를 기다리게 된다. 하지만 서로 원하는 리소스가 상대방에게 할당되어 있기 때문에 이 두 프로세스는 무한정 기다리게 되는데 이러한 상태을 DeadLock상태라고 한다. DeadLock의 필요조건은 아래의 4가지가 있다. -Mutural Exclusion : 한 리소스는 두 개의 프로세스에게 동시에 할당될 수 없다. -Hold and Wait : 한 프로세스가 리소스를 가지고 있고 필요한 또다른 리소스는 다른 프로세스가 가지고 있다. -No .. 더보기
Memory Management - Overlay Overlay란 프로세스가 필요한 메모리의 크기가 할당된 메모리의 크기보다 클때 필요하다. 프로세스의 작업을 여러단개로 나누어 일정 메모리를 같이 사용하는 방법이다. 예를 들어 프로세스 P1이 필요한 메모리가 150K라고 하자. 하지만 P1에게 할당 된 메모리는 80일 경우 P1은 실행 될 수가 없다. 그래서 P1을 70K Pass1과 80K의 Pass2로 나누어 처음에 허용된 메모리 공간에 Pass1을 적재하여 실행하고 그 다음에 Pass2를 적재하여 실행함으로써 메모리 공간의 문제를 해결한다. 언듯보면 Dynamic Loading과 비슷해 보이는데 가장 큰 차이점은 Dynamic Loading은 운영체제에서 관리를 해주고 Overlay의 경우에는 프로그램 개발자가 직접 만들어야 한다는 점이다. RSS.. 더보기
Memory Management - Dynamic Loading, Dynamic Linking 실제로 프로세스의 기계어 데이터가 메모리상의 적재될 때 모든 데이터가 적재되는 것은 아니다. 아주 기본적인 데이터만이 적재 되고 나머지 루틴들은 호출되기 전까지 적재되지 않는데 이런한 방식을 Dynamic Loading이라고 한다. 또 여러 라이브러리 중에서 자주 사용되는 라이브러리가 있는데 이러한 라이브러리를 Shared Library로 만들어 올리고 이러한 라이브러리를 컴파일 시가 아니라 실행시에 Linking하는 것을 Dynamic Linking이라고 한다.(이 반대를 Static Liking이라고 한다.) Dynamic Linking의 가장 대표적인 예가 윈도우의 DLL파일이다. 이러한 Dynamic Linking방식의 장점은 Memory의 효율성이 증가하고 어떤 라이브러리가 업데이트되었을 때 그.. 더보기
Memory Management - MMU Memory-Management Unit(MMU) MMU는 물리적 주소를 논리적 주소로 mapping시켜주는 하드웨어 장치이다. 사용자 프로그램은 물리적 주소가 아닌 논리적 주소를 다룬다. RSS : http://darknata.blog.me/ 더보기
Memory Management - bind란? 메모리의 주소는 크게 물리적 주소(Physical Memory)와 논리적 주소(Logical Memory)로 나눈다. 물리적 주소는 실제 메모리의 유닛(Unit)의 순서대로 지정된 절대 주소를 말하고 논리적 주소는 CPU에 의해 연산된 가장 주소를 얘기한다. Bind란 프로세스 상의 변수와 물리적 주소를 합쳐 고정시키는 것을 말한다. bind를 하는 시간은 크게 3가지로 나눌 수 있는데 Compile Time, Load Time, Execution Time 이렇게 3가지 이다. 시간 순서도는 아래 그림을 보면 된다. Compile Time은 지정된 변수의 주소값과 물리적 주소를 일치시킨다. 즉, 컴파일시 지정된 주소값으로 Base와 Limit를 잡아서 그래도 메모리의 적제한다. 이 경우에 만일 시작 위치.. 더보기