[CS 정리] 운영체제 (OS)

김정욱·2021년 5월 28일
2

면접준비

목록 보기
4/6
post-thumbnail

메모리(Memory)

ref :
https://jinshine.github.io/2018/05/17/%EC%BB%B4%ED%93%A8%ED%84%B0%20%EA%B8%B0%EC%B4%88/%EB%A9%94%EB%AA%A8%EB%A6%AC%EA%B5%AC%EC%A1%B0/
https://devkoboso.com/217

기억장치

  • 레지스터(Register)
    • CPU내에 존재고속 메모리
  • 캐시 메모리(Cache Memory)
    • CPU의 레지스터주 기억장치속도차이를 해결하기 위한 중간 메모리
  • 주 기억장치(Main Memory)
    • CPU가 직접 데이터를 읽고 쓸 수 있는 장치
    • Ex) RAM / ROM
  • 보조 기억장치(Sub Memory)
    • CPU가 직접 접근할 수 없고 접근 시간이 느리지만, 대용량인 기억장치
    • Ex) HDD / SSD 등등

프로세스가 OS로부터 할당받는 RAM의 구조

  • 프로그램이 실행되기 위해 메모리에 로드되어야 한다. 따라서 OS에서 프로그램의 실행을 위한 메모리 공간분리해서 제공한다
  • 구성
    • 코드(Code)
      : 실행 할 프로그램의 코드저장되는 텍스트 영역
    • 데이터(Data)
      : 전역변수 & 정적변수가 저장되는 영역
    • 스택(Stack)
      : 함수의 호출과 관련된 영역 (지역변수 & 매개변수)
    • 힙(Heap)
      : 사용자가 직접 동적으로 할당하고 해제할 수 있는 영역

프로세스와 스레드

[ 프로세스 ]

  • 정의 : 컴퓨터에서 실행되고 있는 프로그램을 의미
  • 특징
    • 각각 독립된 메모리 영역(Code, Data, Stack, Heap)을 할당 받음
    • 기본적으로 최소 1개의 스레드를 가짐
    • 각 프로세스는 별도의 주소 공간에서 실행, 다른 프로세스변수자료구조접근 X
    • 프로세스간 자원에 접근하려면 IPC(Inter Process Communication)을 사용해야 함

[ 스레드 ]

  • 정의 : CPU 사용기본 단위이며, 프로세스 내에 실행되는 여러 흐름의 단위
  • 특징
    • 메모리에서 Stack 영역따로 할당받고 Code, Data,Heap 영역은 공유
    • 같은 프로세스 내에 있는 자원을 공유
    • 각 스레드는 별도의 레지스터스택을 가지지만, Heap메모리서로 읽고 쓸수 있음
  • 장점
    • 프로세스보다 생성 및 종료 시간, 스레드 전환시간짧다
    • 같은 프로세스 내 자원을 공유하므로 커널의 도움 없이 상호간의 통신이 가능

[ 프로세스 vs 스레드 ]

  • 프로세스OS로부터 자원을 할당받는 작업의 단위
  • 스레드프로세스할당받은 자원을 이용하는 실행의 단위
  • 프로세스OS로부터 메모리, 주소,등을 할당받아 독립적으로 사용
  • 같은 프로세스스레드할당받은 자원들을 공유

[ 멀티 스레딩(Multi-threading) ]

  • 설명 : 하나의 프로세스다수의 스레드로 만들어 실행하는 것
  • 장점
    • 프로세스 내에서 스레드자원을 공유하기 때문에 자원의 생성관리중복이 없다
  • 단점
    • 교착상태를 발생시킬 수 있음
      : 스레드 간 자원을 공유하기 때문에 프로그래머가 신경써야 한다
    • 동기화에 주의해야 함
      : 공유자원에 해당하지 않는 것 까지 동기화를 통해 작업 처리 순서를 컨트롤하면 락을 획득한 스레드종료하기 전까지 대기해야하므로 병목현상이 발생할 수 있음

(멀티 프로세스 대신) 멀티 스레딩을 사용하는 이유

  • 자원의 효율성 증대
    • 프로세스를 생성하고 자원을 할당하는 시스템 콜줄어들어 효율적으로 관리 가능
      (프로세스Context Switching시 RAM과 CPU사이에 캐시 메모리까지 초기화되어서 오버헤드가 크다)
    • 스레드는 프로세스 내의 자원을 공유하기 때문에 독립된 프로세스와 달리 스레드간 데이터를 주고 받는 것이 간단하며, 시스템 자원 소모가 줄어든다
  • 처리 비용 감소응답 시간 단축
    • 프로세스간 통신(IPC) 보다 스레드 간의 통신 비용이 더 적어서 통신 부담이 적다
    • 프로세스간 문맥교환보다 스레드 간 문맥 교환 비용이 적다(캐시를 비울 필요가 없어서)

동기화(Synchronization)

  • 프로세스 동기화
    • 하나의 자원한 순간하나의 프로세스만이 이용하도록 순서를 제어하는 것
  • 스레드 동기화
    • 하나의 코드블록 또는 메소드하나의 스레드만이용하도록 순서를 제어하는 것
  • 동기화를 하기 위한 방법
    • 뮤텍스(Mutex)
    • 세마포어(Semaphore)

교착상태(Deadlock)

  • 설명 : 두개 이상프로세스스레드자원을 보유한 채 서로 자원을 기다려서 무한히 대기가 발생하는 것
  • 발생 필요 조건
    • 상호배제(Mutual Exclusion)
      : 한 자원에 대한 여러 프로세스의 동시 접근을 막는 것
    • 점유대기(Hold and Wait)
      : 하나의 자원을 소유하고 다른 프로세스 혹은 스레드자원을 요청
    • 비선점(Non preemptive)
      : 다른 프로세스에 자원을 사용하는 동안 강제로 가져올 수 없는 것
    • 순환대기(Circle wait)
      : 각 프로세스가 다음 프로세스가 요구하는 자원을 가지고 있는 것
      (A->B, B->C, C->A)
  • 해결 방법
    • 예방(Prevention)
      : 발생 필요 조건 4가지중 하나를 해결하여 예방하는 것
    • 회피(Avoidance)
      : 발생하지 않도록 알고리즘을 설계하여 피하는 것
      ex) 은행원 알고리즘
      • 자원을 할당한 후에도 안정 상태로 남는지 사전에 검사하여 교착상태회피하는 방법
    • 탐지(Detection) & 복구(Recovery)
      : 자원 할당 그래프를 모니터링 하며 교착상태를 탐지하는 방식 &
      교착상태가 탐지되면 걸린 상태에서 복구를 시행

      ex) 프로세스 중단 / 자원 선점 /

뮤텍스 & 세마포어

개념

  • 뮤텍스세마포어여러 프로세스나 스레드공유 자원접근하는 것막기 위한 방법
  • 즉, 병행 처리를 위한 프로세스 동기화 기법

  • 뮤텍스(Mutex)
    • 오직 1개의 프로세스(혹은 스레드)공유 자원접근할 수 있도록 제어하는 것
    • Lock / UnLock사용해서 구현
  • 세마포어(Semaphore)
    • 세마포어 변수를 통해 여러 공유 자원들에 대해, 하나에 자원프로세스(혹은 스레드)접근할 수 있도록 제어하는 것
  • 차이점
    • 뮤텍스하나의 동기화 대상(하나의 스레드프로세스)이 자원을 소유할 수 있도록 하는 것
      --> 동기화 대상이 반드시 하나
    • 세마포어세마포어 변수 만큼의 자원과 다수의 프로세스스레드가 있을 때, 결국 하나의 자원하나의 프로세스 혹은 스레드사용하게 하는 것
      --> 동기화 대상(프로세스)다수가 될 수 있음
      (0 또는 1값만 가지는 세마포어이진 세마포어라고 하며, 이는 뮤텍스와 비슷하게 수행)

기아현상 & 에이징

  • 기아현상
    : 프로세스우선순위가 낮아서 원하는 자원을 계속 할당받지 못하는 상태
  • 에이징
    : 기아현상을 방지하기 위한 기술로. 시간에 비례하여 우선순위를 높혀 자원을 할당받게 하는 기법

가상메모리 & 페이징 & 세그먼테이션

ref :
https://user-images.githubusercontent.com/34755287/54821888-d9191700-4ce6-11e9-8b11-7af6fdbcbe06.png

가상 메모리

  • 가상 메모리
    : 주기억장치(RAM)할당할 수 있는 용량한정적이므로 보조기억장치의 일부주 기억장치처럼 사용해서 더 큰 크기의 프로그램실행하는 방법

페이징

  • 설명
    : 가상메모리주기억장치를 각각 동일한 크기분할하는 가상 메모리 관리 기법
    (가상메모리를 분할한 것 = 페이지, 주기억장치를 분할한 것 = 프레임)
    (내부 단편화가 발생 / 할당받은 영역프로세스보다 커서 할당 후 남는 영역)
  • MMU와 페이지 테이블
    • 실제 주소가상 주소매핑하기 위해 MMU을 통해 페이지 테이블 사용
      (CPUMMU(Memory Management Unit)를 통해 흩어진 프로세스의 정보접근할 수 있는 것)
  • 보호(Protection)와 공유(Sharing)
    • 보호
      • 모든 주소페이지 테이블을 경유하므로 페이지 테이블에서 보호 기능을 수행
      • r(read) / w(write) / x(execute) 비트를 두어 해당 될때만 수행할 수 있게 설계
      • 페이징고정된 크기로 분할하기 때문에, 중요한 내용중요하지 않은 내용섞일 수 있음
    • 공유
      • 고정된 크기분할해서 메모리 영역(Stack / Data / Code)이 섞여서 해당 경우를 생각해가면서 공유를 수행해야 한다 --> 세그먼테이션보다 복잡

세그먼테이션

  • 설명
    : 가상메모리의 크기가변적인 크기의 블록으로 편성하여 운용하는 메모리 관리 기법
    (외부 단편화가 발생 / 메모리 크기프로세스보다 작아서 아예 할당되지 않는 영역)
  • MMU와 세그먼트 테이블
    • 역시, 실제 주소가상 주소매핑하기 위해 MMU를 통해 세그먼트 테이블 사용
  • 보호(Protection)와 공유(Sharing)
    • 보호
      • 모든 주소세그먼트 테이블경유하므로, 세그먼트 테이블에서 보호 기능을 수행
      • r(read) / w(write) / x(execute) 비트를 두어 해당 될때만 수행할 수 있게 설계
      • 세그먼트논리적이며 가변적인 단위로 분할하기 때문에, 중요한 내용중요하지 않은 내용섞일 일이 없음 --> 페이징보다 보호가 뛰어남
    • 공유
      • 가변적인 크기로 분할해서 메모리 영역(Stack / Data / Code)이 섞이지 않아서 고려하지 않고 편하게 공유할 수 있음 --> 페이징보다 공유가 뛰어남

페이징과 세그먼트 비교

  • 둘 다 MMU를 통해 각자의 테이블을 만들어서 가상 주소실제 주소매핑한다
  • 보호공유 측면에서는 세그먼테이션이 더 효율적이다
  • 세그먼테이션치명적인 단점이 존재해서 현재 페이징을 일반적으로 사용한다
    • 프로세스가 아예 들어가지 못하는 외부 단편화오버헤드가 매우 크기 때문!

페이지 교체 알고리즘

ref : https://m.blog.naver.com/PostView.naver?blogId=sayme4233&logNo=220364209342&proxyReferer=https:%2F%2Fwww.google.com%2F

설명

  • 가상 메모리관리하는 기법페이징 기법에 반드시 필요한 부분
  • 현재 할당된 페이지어떤 페이지교체해야 하는지 결정하는 방법

종류

  • FIFO(First In First Out)
    • 가장 먼저 들어온 페이지선택하는 방법
  • LRU(Least Recently Used)
    • 최근에 가장 오랫동안 사용하지 않은 페이지교체하는 기법
  • LFU(Least Frequently Used)
    • 총 사용 빈도가 가장 적은 페이지교체하는 기법
  • OPT(Optimal)
    • 가장 효율적인 페이지 교체 알고리즘
    • 가장 오랫동안 사용되지 않을 페이지선택하는 기법
  • NUR(Not Used Recently)
    • LRU동일하게 최근에 사용하지 않은 페이지교체
    • 참조비트 / 변형비트를 통해 LRU의 오버헤드를 줄인 방법
      • 참조비트 : 페이지가 호출되면 1, 아니면 0
      • 변형비트 : 페이지 내용이 변경되면 1, 아니면 0

추가

  • Thrashing(쓰레싱)
    • Page Fault연속적으로 발생해서 프로세스 수행시간보다 페이지 교체 시간더 많은 상태
    • 해결 방법 : 다중 프로그래밍 정도낮춰야 함

인터럽트(Interrupt)

[ 인터럽트 란? ]

  • CPU프로그램을 실행하고 있을 때, 입출력 하드웨어 등의 장치예외상황이 발생하여 처리가 필요할 경우CPU에게 알려주는 것

[ 인터럽트 종류 ]

  • 외부 인터럽트
    • 입출력 인터럽트
    • 하드웨어적 문제 발생
    • 등등
  • 내부 인터럽트
    • 잘못된 명령 / 데이터사용할 때 발생
    • 등등
  • 소프트웨어 인터럽트
    • System Call 발생
    • 등등

[ 인터럽트 발생 처리 과정 ]

  1. 주 프로그램이 실행되다가 인터럽트가 발생
  2. 현재 수행중인 프로그램멈추고, 상태 레지스터PC 등을 스택에 잠시 저장한 뒤 인터럽트 서비스 루틴으로 이동
  3. 인터럽트로 요청된 작업수행
  4. 다시 돌아가서 스택에 저장한 정보를 꺼낸 뒤 수행 시작

[ 인터럽트 vs 폴링 ]

  • 폴링(Pooling) ?
    • 특정한 어떤 일을 할 시기알기 위해 계속 체크하는 방식
  • CPU입력을 받아들이는 방법 2가지 차이점
    • 인터럽트 방식
      • 장점 : 인터럽트가 발생시에만 처리를 하기때문에 시스템 부하가 적다 / 유연하다
      • 단점 : 구현이 어렵다
    • 폴링 방식
      • 장점 : 구현이 쉽다
      • 단점 : 특정 주기마다 확인해야 하기에 시스템의 리소스를 많이 사용

시스템 콜(System Call)

[ 개념 ]

  • 운영체제기능을 제한하여 보안을 하기 위해 커널모드(Kernel Mode) / 사용자 모드(User Mode)로 나뉘어 구동한다.
  • 시스템 콜은 이러한 커널 영역의 기능사용자 모드에서 사용 하기 위한 일종의 인터페이스

[ 분류 ]

  • 프로세스 제어(Process Control)
  • 파일 조작(File Manipulation)
  • 장치 관리(Device Management)
  • 정보 유지(Information manitenance)
  • 통신(Communication)

[ 예시 -프로세스 제어 ]

fork

  • Process 생성제어를 위한 System call
  • 새로운 프로세스(자식 프로세스)만드는 것
  • PCB / 프로세스 메모리 구조 등이 복사
  • 부모 프로세스fork가 호출다음부터 실행이 된다

exec

  • Process 생성제어를 위한 System call
  • 프로세스새로운 것으로 덮어서 실행시켜 버리는 것
  • 새로운 메모리할당하지 않고 현재 프로세스에 덮어 씌우는 것

PCB와 Context Switching

[ PCB ]

설명

  • Process Control Block의 약자
  • 프로세스에 대한 정보Process Metadata저장하는 곳
  • 커널 내에 있는 하나의 자료구조
  • Linked List관리되어 삽입/삭제용이함
  • Process Metadata
    • Process ID
    • Process State
    • Process Priority
    • CPU Usage

PCB가 필요한 이유 ?

  • PCB가 필요한 이유 ?
    • CPU는 프로세스여러개일 때, CPU 스케줄링을 통해 프로세스관리
    • 이 때 CPU각 프로세스의 정보를 알기 위해 PCB가 필요

프로그램 실행하면 ?

  • 프로그램을 실행하면 ?
    • 프로그램 실행
    • 프로세스 생성
    • 프로세스 주소 공간(코드 / 데이터 / 스택) 할당
    • 프로세스메타데이터PCB에 저장되어 커널 영역에 생김

[ Context Switching ]

설명

  • 문맥교환 이라고도 함
  • 스케줄링에 따라 실행중인 프로세스교체할 때, 교체되는 프로세스의 상태기억시켜 두고, 새로운 프로세스의 상태처리기에 넘겨주는 일련의 작업을 의미
  • CPU이전 프로세스 상태PCB에 보관하고, 다음 프로세스의 정보PCB로 부터 읽어 레지스터에 적재
  • CPU수행중인 프로세스변경할 때, CPU의 레지스터 정보변경되는 것
  • 인터럽트 처리수행하기 전발생
  • 실제로 프로세스Ready --> Running상태 전환하는 과정디스패처(Dispatcher)에 의해 수행되며, 이 과정을 디스패치(Dispatch)라고 한다
    (Context Switching 과정디스패치 과정포함된 구조)

문맥 교환 발생 & 미발생

  • Context Switching발생하는 경우
    • 대기 Queue에 있는 프로세스CPU할당받아 실행상태로 갈 때
    • Time Interrupt가 발생
    • I/O요청 System Call
  • (주의!) Context Switching아닌 경우
    : 두 경우 모두 운영체제커널 모드로 바뀌어서 실행될 뿐 CPU점유하는 프로세스다른 프로세스변경되지 않음, 다시 돌아와서 작업을 이어나감!
    • Time interrupt제외한 interrupt
    • I/O System Call제외한 system call

문맥 교환 오버헤드 ?

  • 문맥교환이 발생할 때 레지스터새로운 PCB를 적재하는 과정동안 CPU가 아무런 일도 할 수 없는데 이 구간문맥교환의 오버헤드라고 함

문맥 교환 오버헤드 해결방안

  • 프로그램 다중화 수준 낮춤
    : 다중 프로그래밍 수준낮추어 문맥 교환 발생 빈도감소시킴
  • 스레드 이용
    : Light weight 프로세스스레드사용해서 문맥 교환 부하 최소화

스케줄링 & CPU 스케줄링

[ 스케줄링 ]

개념

  • 스케줄링이란 프로세스들에게 cpu 등의 자원 배정을 적절히 하여 다중 프로그래밍가능하게 하는 운영체제의 동작 기법

종류

  • 장기 스케줄링(Long-term scheduling)
    • 어떤 프로세스시스템의 자원을 차지할 수 있도록 할 것인가결정하여 프로세스준비(ready)상태 로 보내는 작업
    • 작업 스케줄러에 의해 수행
    • 수행 빈도적고 느리다
  • 중기 스케줄링(middle-term scheduling)
    • 장기 / 단기 스케줄러 사이에서 완충 역할
    • 메모리에 적재프로세스의 수관리
    • 메모리 부족 --> swap out / 메모리 충분 --> swap in
  • 단기 스케줄링(short-term scheduling)
    • CPU 스케줄러 / 프로세서 스케줄러라고 불림
    • 실제로 CPU어떤 프로세스에게 할당할 지 결정하는 역할
    • 자주 수행되고 빠름
    • 문맥 교환(Context Switching)수행

프로세스 상태

  • 생성 : 프로세스가 생성되고 있는 상태
  • 준비 : 프로세스프로세서에 의해 수행되고 있지는 않지만, 언제든지 사용할 수 있는 상태
              준비상태 queue에서 대기하는 상태
  • 실행 : 프로세서 스케줄러에 의해 CPU가 할당되어 실행되고 있는 상태
  • 대기 : 입출력과같은 인터럽트로 인해 프로세스가 대기중인 상태
  • 종료 : 프로세스의 실행이 끝나서 종료된 상태

[ CPU 스케줄링 ]

  • CPU 스케줄러(프로세서 스케줄러 = 단기 스케줄러)에 의해 수행
  • 우선순위로 인해 실행 중간에 CPU를 선점할 수 있는지 여부에 따라 크게 2종류로 구분
    • 선점 스케줄링 : 중간에 CPU 제어권을 뺏음
    • 비선점 스케줄링 : 중간에 CPU 제어권을 뺏지 않음

비선점(non-preemptive) 스케줄링

  • FCFS(First Come First Serve)
    • CPU에게 먼저 요청한 순서대로 CPU를 배정받는 스케줄링 기법
  • SJF(Short Job First)
    • CPU 요구량이 가장 적은 프로세스 부터 실행하는 스케줄링 기법
  • HRN(Hightest Response-ratio Next)
    • 우선순위를 계산하여 점유 불평등을 보완한 방법 (SJF의 단점 보완 / 기아현상 방지)
    • 우선순위 = (대기시간 + 실행시간) / (실행시간)

선점(preemptive) 스케줄링

  • Round Robin(라운드 로빈)
    • FCFS 기반으로 CPU를 할당하되, 각 프로세스한번에 쓸 수 있는 CPU 시간이 지나면 시간 종료 인터럽트에 의해 CPU를 선점당하는 스케줄링 기법
    • 할당 시간(Time Quantum)길면 FCFS와 같게 되고 / 짧으면 잦은 문맥교환으로 오버헤드가 증가
  • SRT(Shortest Remaining Time)
    • 준비완료 큐에서 CPU 요구량이 가장 짧은 것을 먼저 실행 시킴 --> SJF와 동일
    • 하지만 중간더 CPU 요구량이 적은 프로세스가 오면 선점이 된다
  • Multilevel-Queue(다단계 큐)
    • 각 큐절대적인 우선순위를 가지며, 높은 우선순위의 큐 부터 각자의 스케줄링 기법을 적용하여 진행하는 스케줄링 기법
    • 각 프로세스종류우선순위에 따라 큐에 배정
    • 큐들 간프로세스가 이동할 수 없어서 스케줄링 부담은 적지만, 유연성이 떨어짐
  • Multilevel-Feedback-Queue(다단계 피드백 큐)
    • 프로세스들은 각 큐 사이를 이동할 수 있어서 우선순위가 낮은 프로세스도 실행될 수 있음
    • 각 큐간 프로세스가 이동하기 때문에 MLQ보다 유연한 수행 가능

IPC(Inter Process Communication)

개념

  • 독립적으로 실행되는 프로세스 간 통신을 하기 위한 것
  • 프로세스커널이 제공하는 IPC 설비이용프로세스 간 통신을 할 수 있음
  • IPC통신에서 프로세스 간 데이터를 동기화하고 보호하기 위해서 세마포어뮤텍스사용
  • 정말 다양한 종류가 있지만, 모두 알 필요는 없음

Pipe(익명 pipe)

  • 파이프두 개의 프로세스연결하는데, 하나의 프로세스쓰기만하고 다른 하나읽기만 가능
  • 한쪽 방향으로만 통신이 가능반이중 통신
  • 양쪽 모두 송/수신을 하려면 2개의 파이프가 필요
  • 익명의 파이프통신할 프로세스명확히 알 수 있는 경우에 사용 (부모-자식 프로세스 간 통신)

Named Pipe(FIFO)

  • Named Pipe전혀 모르는 상태의 프로세스들 사이 통신에 사용
  • 익명 Pipe확장된 상태부모 프로세스무관한 다른 프로세스와도 통신이 가능
  • 양쪽 모두 송/수신을 하는 전이중 통신을 위해서는 역시 2개의 파이프가 필요

Message Queue

  • 입출력 방식Named Pipe와 동일
  • 파이프데이터 흐름일 뿐인데, Message Queue메모리 공간을 가짐
  • 메시지데이터를 담은 후 번호(식별자)를 붙이기 때문에, 전역으로 관리되는 하나의 큐를 통해서 여러 프로세스동시에 데이터를 주고 받을 수 있음

Shared Memory(공유 메모리)

  • 파이프, 메시지 큐통신을 위한 설비라면, 공유 메모리데이터 자체를 공유하도록 지원하는 설비
  • 프로세스간 메모리 영역을 공유해서같이 사용할 수 있도록 허용하는 것
  • 프로스세공유 메모리 할당커널요청
    --> 커널해당 프로세스메모리 공간 할당
    --> 모든 프로세스해당 메모리 영역접근 가능
  • 중개자 없이 곧바로 메모리에 접근하여 IPC중가장 빠르게 동작

Memory mapped file(메모리 맵)

  • 공유 메모리처럼 메모리를 공유하는 방식
  • 열린 파일메모리에 매핑시켜 공유하는 방식
  • 대용량 데이터를 공유해야할 때 사용

Socket(소켓)

  • 네트워크 소켓 통신을 통해 데이터 공유
  • 클라이언트서버소켓을 통해서 통신하는 구조
  • 원격에서 프로세스 간 데이터를 공유할 때 사용
  • 서버(bind / listen / accept) / 클라이언트(connect)

race condition & critical section

ref : https://m.blog.naver.com/PostView.naver?blogId=winipe&logNo=150162868972&proxyReferer=https:%2F%2Fwww.google.com%2F

  • 공유 자원에 대해 여러 프로세스동시에 접근할 때, 결과값에 영향을 줄 수 있는 상태race condition 이라고 한다
  • race condition이 발생하면 프로세스에 원하는 결과가 발생하는 것보장할 수 없다
  • race condition문제잘 해결하기 위해서공유되는 영역임계 영역(critical Section)문제를 해결해야 한다
  • 임계 영역(critical section) 문제를 해결하기 위한 3가지 조건
    • 상호 배제 (Mutual exclution)
      : 하나의 프로세스임계 영역에 들어가 있다면 다른 프로세스들어갈 수 없음
    • 진행 (Progress)
      : 임계 영역에 들어가려는 프로세스여러개일 때 어느것이 들어갈 지 결정을 해야함
    • 한정 대기 (Bounded waiting)
      : 기아현상방지하기 위해 한 번 임계구역에 들어간 프로세스다음 번에 제한을 두어야 함
  • 임계 영역동시접근 문제를 해결하는 방법
    • 락(lock)
    • 세마포어(semaphore)
    • 모니터(monitor) 등
profile
Developer & PhotoGrapher

0개의 댓글