운영체제 몇 가지

2025. 1. 13. 20:46·CS

갑자기 생각난 운영체제에 관련된 내용들 몇 가지를 정리해 본 글입니다.

0. 프로세스와 스레드

https://velog.io/@gb_leem/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-%EB%A6%AC%EB%B7%B0-2-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%99%80-%EC%93%B0%EB%A0%88%EB%93%9C

 

운영체제 리뷰 2 - 프로세스와 쓰레드

OS 2 - process and thread

velog.io

  • 프로세스 
    • 정의
      • 실행중인 프로그램
      • 같은 프로그램을 여러개 실행시켜도, 모두 다 프로세스이다.
    • 프로세스는 각자 고유한 가상 메모리를 가지고 있기에,
    • 실제 물리 메모리와 상관없이 프로세스 자신이 전체 메모리를 모두 가진 것처럼 동작한다. (by 가상 메모리)
    • 다른 프로세스와 통신하려면, IPC나 공유 메모리 방식을 사용해야 하며, 스레드보다는 무거운 작업이다.
    • 프로세스의 context switching은 스레드보다 무거운 작업이다.
  • 스레드
    • 정의
      • 각각의 프로세스의 실행 흐름
      • 하나의 프로세스에서 여러 스레드를 만들 수 있다.
    • FCFS나 RR, SJF 등의 방식으로 context switch 한다.
    • 스레드는 메모리를 공유하기 때문에 Lock이나 Atomic을 잘 사용해야 한다.

1. 가상 메모리

https://velog.io/@gb_leem/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-%EB%A6%AC%EB%B7%B0-6-%EB%A9%94%EB%AA%A8%EB%A6%AC

 

운영체제 리뷰 6 - 메모리

OS 6 - memory

velog.io

  • 개요
    • 가상의 메모리 체계를 만들어, 실제로 사용되는 물리 메모리 공간에 1:1로 대응시키는 것
    • 왜 가상 메모리가 필요한가
      • 각 프로세스가 독립적인 가상 메모리 공간을 가지게 하기 위해서
        • 실제 물리 메모리에 상관없이 더 큰 메모리를 사용할 수 있게 한다.(메모리 자원을 전부 점유하고 있는 것처럼 해준다)
        • 그 결과 프로그래머가 물리 메모리의 사용량이나 점유현황을 신경쓰지 않아도 된다.
        • 또한 가상 메모리는 프로세스마다 독립적이기 때문에, 운영체제의 안정성을 높일 수 있다.
      • 외부 단편화를 완화하기 위해서 (페이징 기법)
        • 프로세스의 논리 주소 공간을 일정한 크기로 자르고(페이지),
        • 메모리의 물리 주소 공간을 프레임(frame)이라는 페이지와 동일한 일정한 단위로 자른 뒤
        • 페이지를 프레임에 할당하는 기술(불연속적으로 할당)
        • 이때 페이지 테이블이라는 것을 통해 CPU가 바라보는 입장에서 주소들이 연속적으로 배치되는 것 처럼 볼 수 있다.
        • 단, 내부 단편화라는 단점이 발생할 수 있다.
  • 외부 단편화
    • 프로세스를 할당하고, 해제하는 것을 반복하면서 메모리 사이사이에 빈 공간이 발생하면 
    • 실제로 남아있는 메모리 공간이지만, 사용하지 못하는 경우가 발생한다.
    • 예를 들어, 아래의 그림처럼 50MB의 공간이 남아있지만 할당하고 싶은 프로세스가 40 MB 라면 할당할 수 없다.
    • 이를 해결하기 위해 메모리 압축이라는 기술이 있지만, 오버헤드가 매우 크다

  • 내부 단편화
    • 특정 프로세스의 크기가 프로세스를 작게 자른 크기인 페이지의 배수가 되지 않을 때 발생한다.
    • 결과적으로 하나의 페이지 크기보다 작은 크기는 낭비되게 된다.
    • 하지만 그 낭비되는 크기가 대체로 외부 단편화 보다는 작기 때문에, 이 방식을 사용한다.
  • 페이지 교체와 프레임 할당
    • 물리 메모리보다 큰 프로세스를 실행할 수 있지만, 물리 메모리의 크기는 한정되어있기 때문에 
    • 결국에는 페이지 교체를 하고, 프레임 할당을 해야한다.
    • 다양한 방식으로 페이지 교체와 프레임 할당을 하지만, 스레싱이 발생할 수 있다.
    • 페이지 교체
      • 가장 효율적으로 사용할 페이지를 할당하고, 안쓰는 페이지를 해제하는 것
    • 페이지 폴트
      • 물리 메모리 안에서 페이지에 해당하는 프레임이 실제로 존재하지 않는 경우
      • 페이지 교체 알고리즘으로 인해 써야하는 페이지를 해제해 버렸다면, 페이지 폴트가 발생할 수 있다.
    • 스레싱
      • 좋지 않은 페이지 교체 알고리즘을 사용하여, 페이지 폴트가 자주 발생하고
      • 프로세스 실행 시간보다 페이징에 더 많은 시간을 소요하여 성능이 저해되는 문제를 말한다.

2. Context Switch

  • 개요
    • 기존에 실행중인 프로세스의 context를 백업하고, 새로 실행 할 프로세스의 context를 복구하는 과정
    • 프로세스 A에서 프로세스 B로 실행 순서가 넘어가면 (예를 들어 인터럽트 발생)
      • 기존에 실행되던 프로세스 A의 중간 정보를 백업(저장)하고
      • 프로세스 B의 context를 복구(교환) 한다.
      • 다시 프로세스 A의 차례가 오면, 백업된 정보를 기반으로 다시 복구하는 것
    • context switch 동안은 CPU가 다른 일을 못하기 때문에, 오버헤드이다.
  • 인터럽트
    • 키보드, 마우스 인풋 등 특정 프로세스가 진행되는 것을 막는 행위
    • 인터럽트가 발생하면, 기존에 진행하던 프로세스는 멈춘다.

3. 데드락

https://velog.io/@gb_leem/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-%EB%A6%AC%EB%B7%B0-4-%EB%8F%99%EA%B8%B0%ED%99%94

 

운영체제 리뷰 4 - 동기화

OS 4 - synchronization

velog.io

 

  • 락
    • 락을 걸고 들어간 해당 스레드를 제외한 다른 어떤 스레드도 락이 걸린 구역으로 들어가지 못한다.
    • 락을 걸었던 스레드가 락을 해제하면, 다른 스레드가 접근할 수 있다.
    • 스레드들은 공유메모리에 접근하여 읽기 쓰기를 수행하기 때문에, 항상 락을 생각해야 한다.
  • 데드락
    • 특정 자원(공유 자원)을 사용하는 스레드들이 서로 자원이 반납하기만을 (락이 해제되기를) 무한히 기다리는 상태를 말한다.
  • 데드락 해결 방안
    • 프로세스를 동기화 시켜야 한다!
      • 실행순서 제어: 프로세스를 올바른 순서대로 실행하기
      • 상호 배제: 동시에 접근이 안되는 자원(critical section)에 하나의 프로세스만 접근하기
      • race condition: critical section(임계구역)에 동시 접근하여 자원의 일관성이 깨지는 상태
    • 동기화 기법
      • 뮤텍스
        • 상호 배제
        • 0과 1만을 사용하는 바이너리 세마포
        • 하나의 자물쇠를 가지고 critical section을 지킴
      • 세마포
        • 상호배제, 실행순서 동기화
        • 공유 자원이 여러 개 있어도 사용가능
        • 카운팅 세마포
          • critical section 앞에서 멈춤 신호를 통해 기다리고
          • 가도 좋다는 신호를 받으면, 진입하는 방식
        • 문제점
          • 아래 while문 처럼 계속해서 기다리는 busy waiting이 발생하기 때문에
          • 사용할 수 있는 자원이 없는 경우에 대기 상태로 만들고, 자원이 다시 생기면 준비 상태로 만드는 방법이 있다. (PCB 이용)
      • 모니터
        • 임계구역 앞에서 wait() 이나 signal()등 호출하는 것이 번거롭기에 사용하는 방식
//mutex lock
acquire()
{
    while(lock == true) //잠겨있다면,
        ;			    //임계구역이 잠겨있는지 계속 확인
    lock = true;		//lock == false인 경우 임계구역 진입 후 lock을 다시 true로 만들기
}

release()
{
	lock = false;		// 임계구역 작업 끝났으니 lock 해제
}


//semaphore
wait()
{
    while(S<=0) //임계 구역에 진입 못하면
    ;			//진입 가능한 자원 있을때 까지 확인
    S--;		//진입할 수 있다면, S하나 감소시키고 임계구역 진입
}

signal()
{	
	S++;		//임계구역에서 작업을 마친 뒤 S를 1증가
}

 

'CS' 카테고리의 다른 글

OS & CS 몇 가지  (0) 2025.03.21
온라인 게임과 네트워크 구성  (0) 2025.03.13
네트워크 개념  (0) 2025.03.13
'CS' 카테고리의 다른 글
  • OS & CS 몇 가지
  • 온라인 게임과 네트워크 구성
  • 네트워크 개념
gbleem
gbleem
gbleem 님의 블로그 입니다.
  • gbleem
    gbleem 님의 블로그
    gbleem
  • 전체
    오늘
    어제
    • 분류 전체보기 (189)
      • Unreal Engine (73)
      • C++ (19)
      • 알고리즘(코딩테스트) (32)
      • TIL (60)
      • CS (4)
      • 툴 (1)
  • 블로그 메뉴

    • 홈
    • 카테고리
  • 링크

    • 깃허브
    • velog
  • 공지사항

  • 인기 글

  • 태그

    상속
    character animation
    Vector
    C++
    매크로 지정자
    addonscreendebugmessage
    템플릿
    map을 vector로 복사
    BFS
    cin함수
    additive animation
    enhanced input system
    gamestate
    const
    motion matching
    blend pose
    DP
    actor 클래스
    applydamage
    싱글턴
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
gbleem
운영체제 몇 가지
상단으로

티스토리툴바