[운영체제 스터디] - 7. 데드락과 메모리관리

Ader(아더)·2022년 3월 21일
0

OS

목록 보기
7/11
post-thumbnail

[7주차] - 데드락과 메모리 관리


1. DeadLock Avoidance

  • 프로세스별로 최대의 자원을 실행시점에 계산해 자원할당 작업 때 데드락 발생가능성이 있다면 자원을 할당하지 않아 DeadLock을 방지한다.
  • 시스템의 상태가 원래 상태로 돌아올 수 있는 경우에만 자원을 할당한다

2. Banker's Algorithm

  • 가정
    • 모든 프로세스는 자원의 최대 사용량을 미리 명시
    • 프로세스가 요청 자원을 모두 할당받은 경우 유한 시간 안에 이들 자원을 다시 반납한다
  • 방법
    • 기본 개념
      • 자원 요청 시 safe 상태를 유지할 경우에만 할당
    • 총 요청 자원의 수가 가용 자원의 수보다 적은 프로세스를 선택
      • 그런 프로세스가 없다면 unsafe 상태
      • 그런 프로세스가 있으면 그 프로세스에게 자원을 할당
    • 할당받은 프로세스가 종료되면 모든 자원을 반납
    • 모든 프로세스가 종료될 때까지 이러한 과정 반복

3. DeadLock Detection and recovery



4. DeadLock Ignorance

  • 현대 범용 운영체제들은 이 방법을 채택

5. Logical vs Physical Address

  • Logical Address(=virtual address)
    • 프로세슴마다 독립적으로 가지는 주소 공간
    • 각 프로세스마다 0번지 부터 시작
    • cpu가 보는 주소는 logical address임
  • Physical address
    • 메모리에 실제 올라가는 위치
  • 주소 바인딩
    • 주소를 결정하는 것

6. 주소 바인딩

  • 메모리 주소 변환은 운영체제가 아닌 하드웨어가 하는 것이다.

7. Memory Management Unit

  • MMU
    • logical address를 physical address로 매핑해 주는 Hardware device
  • MMU scheme
    • 사용자 프로세스가 CPU에서 수행되며 생성해내는 모든 주소값에 대해 base register의 값을 더 한다
  • user program
    • logical address만을 다룬다
    • 실제 physical address를 볼 수 없으며 알 필요가 없다

8. Dynamic Loading

  • 프로세스 전체를 메모리에 미리 다 올리는 것이 아니라 해당 루틴이 불려질 때 메모리에 load하는 것
  • memory utiliztion의 향상
  • 가끔씩 사용되는 많은 양의 코드의 경우 유용
  • 운영체제의 특별한 지원 없이 프로그램 자체에서 구현 가능

9. Overlays

  • 메모리에 프로세스의 부분 중 실제 필요한 정보만을 올림
  • 프로세스의 크기가 메모리보다 클 때 유용
  • 운영체제의 지원없이 사용자에 의해 구현
  • 작은 공간의 메모리를 사용하던 초창기 시스템에서 수작업으로 프로그래머가 구현

10. Swapping


11. Dynamic Linking

  • Linking을 실행시간까지 미루는 기법
  • Static linking
    • 라이브러리가 프로그램의 실행 파일 코드에 포함됨
    • 실행 파일의 크기가 커짐
    • 동일한 라이브러리를 각각의 프로세스가 메모리에 올리므로 메모리 낭비
  • Dynamic linking
    • 라이브러리가 실행 시 연결됨
    • 라이브러리 호출 부분에 라이브러리 루틴의 위치를 찾기 위한 stub이라는 작은 코드를 둠
    • 라이브러리가 이미 메모리에 있으면 그 루틴의 주소로 가고 없으면 디스크에서 읽어옴
    • 운영체제의 도움이 필요

12. Allocation of Physical Memory

  • Contiguous Allocation
    • 고정분할(Fixed partition) 방식
      - 물리적 메모리를 몇 개의 영구적 분할로 나눔
      - 분할의 크기가 모두 동일한 방식과 서로 다른 방식이 존재
      - 분할당 하나의 프로그램 적재
      - 융통성이 없음
      - 동시에 메모리에 load되는 프로그램의 수가 고정됨
      - 최대 수행 가능 프로그램 크기 제한
      - Internal fragmentaion 발생
    • compaction
      • external fragmentation 문제를 해결하는 한 가지 방법
      • 사용 중인 메모리 영역을 한군데로 몰고 hole들을 다른 한 곳으로 몰아 큰 block을 만드는 것
      • 매우 비용이 많이 드는 방법
      • 최소한의 메모리 이동으로 compaction하는 방법
      • compaction은 프로세스의 주소가 실행 시간에 동적으로 재배치 가능한 경우에만 수행될 수 있다
    • 가변분할(Variablle partition) 방식
      • 프로그램의 크기를 고려해서 할당
      • 분할의 크기, 개수가 동적으로 변함
      • 기술적 관리 기법 필요
      • External fragmentation 발생

본 포스팅은 반효경 교수님의 2017 운영체제 강의를 바탕으로 제작되었습니다.

profile
하루하루 성장하는 개발자

0개의 댓글