OS Interview 2

이정연·2023년 1월 5일
0

ComputerScience

목록 보기
5/13

Multi process/thread 동기화 문제

  • Mutex

    • 1개의 스레드 만이 공유 자원에 접근할 수 있도록 하여 race condition을 방지
    • 점유 스레드 lock 👉🏻 타 스레드 unlock
  • Semaphore

    • 뮤텍스는 단일 점유라면 세마포어는 S개 스레드 점유
    • 정수형 변수 S를 통해 현재 점유 스레드 개수 파악

동기화 문제

앞선 포스팅에서 <일관성 문제>라고 설명했다.

A와 B가 각각 3만원,10만원을 입금했다고 가정했을 때 예상 금액은 5+3+10 = 18만원이 계좌에 있어야 맞다.

그러나 위와 같이 atomic operation을 수행하게 되면 최종적으로 계좌에 8만원이 있는 꽤나 위험한 상황이 발생할 수 있다.

Critical Section

  • 동기화 문제를 방지하고자 만든 영역
  • <Entry / Critical / Exit section>으로 구성
  • Entry: 진입 허가 요청
  • Critical: 자원 점유 코드 수행
  • Exit: 탈출
  • process/thread가 임계 영역을 실행하고 있으면 다른 process/thread는 실행 불가

교착상태(Deadlock)

조건

  • 상호 배제
    • Mutex 상황
  • 점유 대기
    • 프로세스/스레드가 자원을 보유한 상황에서 다른 프로세스/스레드의 자원을 기다림
  • 비선점
    • 프로세스/스레드가 다른 것의 자원을 강제 탈취 불가
  • 순환 대기
    • 프로세스/스레드의 대기 구조가 원형

해결책

  • 무시
    • 데드락을 무시하고 특별한 조치를 취하지 않는 방법
    • 현대 사회에서는 데드락 발생확률이 낮고 발생하더라도 해결 비용이 크기 때문에 무시 방법을 많이 채택
    • 시스템 성능 저하 ❌
  • 예방
    • 데드락 발생 4대 조건 중 1개 제거
    • <순환 대기>를 제거하는 것이 현실적 해결책
    • 해결 비용 ⬆️
  • 회피
    • 프로세스/스레드가 자원을 요구할 때, 시스템은 자원을 할당한 후에도 안정 상태로 남아있는가를 확인하여 교착 상태를 회피하는 방법
  • 탐지-회복
    • 시스템 검사를 통해 deadlock 발생을 탐지하고, 이를 회복시키는 방법

Memory

Paging

💡

[용어정리] - 논리적 주소(logical address)란?

process가 memory에 적재되기 위한 독자적인 주소 공간인 논리적 주소(logical address)가 생성됩니다. 논리적 주소는 각 process마다 독립적으로 할당되며, 0번지부터 시작됩니다.

[용어정리] - 물리적 주소(physical address)란?

물리적 주소(physical address)는 process가 실제로 메모리에 적재되는 위치를 말합니다.

[용어정리] - 주소 바인딩(address binding)이란?

CPU가 기계어 명령을 수행하기 위해 process의 논리적 주소가 실제 물리적 메모리의 어느 위치에 매핑되는지 확인하는 과정을 주소 바인딩(address binding)이라고 합니다.

메모리 단편화

RAM에서 메모리의 공간이 작은 조각으로 나뉘어져 사용가능한 메모리가 충분히 존재하지만 할당(사용)이 불가능한 상태

내부 단편화

메모리를 할당할 때 프로세스가 필요한 양보다 더 큰 메모리가 할당되어서 프로세스에서 사용하는 메모리 공간이 낭비 되는 상황

  • 예를 들어 메모장을 켰는데 OS가 4kb를 할당해줬다. 그런데 사실상 1kb만큼만 사용하고 있을 때 필요 이상으로 프로세스가 메모리를 할당받았으므로 내부 단편화가 3kb만큼 생긴 것임.

외부 단편화

메모리가 할당되고 해제되는 작업이 반복될 때 작은 메모리가 중간중간 존재하게 된다. 이 때 중간중간에 생긴 사용하지 않는 메모리가 많이 존재해서 총 메모리 공간은 충분하지만 실제로 할당할 수 없는 상황

  • 예를 들어 메모리 처음 주소에 8mb짜리 프로세스가 할당되었고 바로 이어서 16mb짜리 프로세스가 할당되었다고 가정했을 때 8mb짜리 프로세스를 종료시키면 메모리 처음 주소부터 8mb만큼 공간이 생긴다.

이런 식으로 계속해서 빈 메모리가 쌓이는데 예를 들어서 빈 메모리의 공간중에 제일 큰 빈 메모리가 8mb라고 한다면 9mb짜리 프로세스를 할당을 해야할 때 마땅한 공간은 없지만 전체적으로 메모리 여유는 있을 때 외부단편화가 생겼다고 한다.

Segmentation

segmentation이란 process가 할당받은 메모리 공간을 논리적 의미 단위(segment)로 나누어, 연속되지 않는 물리 메모리 공간에 할당될 수 있도록 하는 메모리 관리 기법입니다.

vs Paging

페이징 기법은 일정한 단위로 메모리를 나누었다면, 세그멘테이션은 의미 단위(code,data,heap,stack 등)로 나누기에 메모리의 크기가 제각각이다.

paged segmentation

Segmentation 👉🏻 Paging

segmentation을 먼저 한 후, 각각을 일정한 단위로 나누는(paging) 방법

Virtual Memory

가상 메모리(virtual memory)란 process 전체가 메모리에 올라오지 않더라도 실행이 가능하도록 하는 기법입니다. 가상 메모리 기법을 통해 사용자 프로그램이 물리적 메모리보다 커져도 실행이 가능하다는 장점이 있습니다.

가상 메모리에서 실제 사용하는 부분을 물리 메모리에 적재하고 당장 필요없는 부분을 디스크에 적재한다.

요구 페이징

당장 사용될 주소 공간을 page 단위로 메모리에 적재하는 방법을 요구 페이징(demand paging)이라고 합니다.

  • CPU의 요청이 들어올 때 적재
  • 당장 필요한 부분만 메모리에 올리기에 메모리 사용량 ⬇️
  • 전체 프로세스 메모리 적재량 ⬇️ 👉🏻 입출력 오버헤드 ⬇️

Page fault

가상 메모리에 요구하는 페이지가 없음을 의미

디스크에서 비존재 페이지를 가져와 물리적 메모리에 업데이팅 후 Page table의 페이지 비트를 valid로 변경

Page 교체 알고리즘

알고리즘설명
FIFO(First In First Out)메모리에 올라온지 가장 오래된 page를 교체한다.
최적 페이지 교체앞으로 가장 오랫동안 사용되지 않을 page를 찾아 교체한다. 실제구현은 어렵다
LRU(Least Recently Used)가장 오랫동안 사용되지 않은 page를 교체한다.
LFU(Least Frequently Used)참조 횟수가 가장 적은 page를 교체한다. 비용대비 성능이 좋지 않아 잘 쓰이진 않는다.

참고 자료

https://jeong-pro.tistory.com/91

profile
0x68656C6C6F21

0개의 댓글