Posts [CS] 운영체제
Post
Cancel

[CS] 운영체제

프로세스와 스레드

프로세스: 실행되고 있는 프로그램, 메모리에 올라와 실행되는 인스턴스 스레드: 프레세스 안에서 실행되는 흐름 단위

  • 기본적으로 프로세스마다 최소 1개의 스레드 보유

https://user-images.githubusercontent.com/46195613/112421900-56167580-8d73-11eb-88fe-1b3922250f16.png

  • 프로세스는 각각 별도의 주소공간 할당
    • Code: 코드 자체를 구성하는 메모리 영역 ( 프로그램 명령 )
    • Data: 전역변수, 정적변수, 배열 등 (초기화 된 데이터)
    • Heap: 동적 할당시 사용 (new, malloc)
    • Stack: 지역변수, 매개변수, 리턴 값 ( 임시 메모리 영역 )
  • 스레드는 스택만 따로 할당 받고 나머지 영역은 서로 공유
  • 프로세스 vs 스레드
    • 프로세스는 자신만의 고유 공간과 자원을 할당받아 사용
    • 스레드는 다른 스레드와 공간, 자원을 공유하면서 사용

멀티프로세스

하나의 컴퓨터에 여러 CPU 장착 -> 하나 이상의 프로세스를 동시에 처리 (병렬)

  • 각각 독립된 메모리 영역을 갖고 있어, 작업량이 많을수록 오버헤드 발생
  • Context Switching으로 인한 성능저하
    • Context Switching은 프로세스의 상태 정보를 저장하고, 복원하는 일련의 과정
    • 다른 프로세스로 전환될 때 동작 중이던 프로세스가 대기 상태로 변경되고 해당 프로세스의 상태를 보관한 다음, 대기하고 있던 다른 프로세스의 상태를 복구하여 다른 프로세스를 실행하는 것
    • 프로세스는 각 독립된 메모리 영역을 할당받아 사용되므로, 캐시 메모리 초기화 같은 무거운 작업이 진행됬을 때 오버헤드가 발생

멀티 스레드

하나의 응용 프로그램에서 여러 스레드를 구성해 각 스레드가 하나의 작업을 처리하는 것

  • 스레드들이 공유 메모리를 통해 다수의 작업을 동시에 처리하도록 해줌
  • 장점
    • 독립적인 프로세스에 비해 공유 메모리만큼의 시간, 자원 소실이 감소
    • 전역 변수와 정적 변수에 대한 자료 공유
  • 단점
    • 안전성 문제. 하나의 스레드가 데이터 공간을 망가뜨리면, 모든 스레드가 작동 불능이 될 수 있다.
    • 이를 Critical Section 기법을 통해 대비

뮤텍스와 세마포어

뮤텍스

Mutual Exclusion으로 상호배제라고 한다. 임계 영역을 가진 쓰레드들의 실행 시간이 서로 겹치지 않게 각각 단독으로 실행되게 하는 기술. 다중 프로세스들의 공유 리소스에 대한 접근을 조율하기 위해 locking와 unlocking를 사용한다. 즉, 뮤텍스 객체를 두 쓰레드가 동시에 사용할 수 없다.

세마포어

세마포어는 리소스의 상태를 나타내는 간단한 카운터로 생각할 수 있다. 세마포어의 값에 따라, 그 프로세스가 즉시 자원을 사용할 수 있거나, 또는 이미 다른 프로세스에 의해 사용중이라는 사실을 알게 되면 일정 시간을 기다린 후 다시 자원을 요청해야 한다. 세마포어를 사용하는 프로세스는 그 값을 확인하고, 자원을 사용하는 동안에는 그 값을 변경함으로써 다른 세마포어 사용자들이 기다리도록 해야한다.

차이점

  • 세마포어는 뮤텍스가 될 수 있지만 뮤텍스는 세마포어가 될 수없다. (뮤텍스는 상태가 0,1 두개 뿐인 이진 세마포어)
  • 세마포어는 소유할 수 없는 반면, 뮤텍스는 소유가 가능하며 소유주가 이에 책임을 진다.
  • 뮤텍스의 경우 뮤텍스를 소유한 쓰레드가 뮤텍스를 해제할 수 있지만, 세마포어는 세마포어를 소유하지 않는 쓰레드도 세마포어를 해제할 수 있다.

가장 큰 차이는 관리하는 동기화 대상의 갯수이다. 뮤텍스는 오직 하나일때, 세마포어는 여러개일 때 사용한다.

Critical Section

다중 프로그래밍에서 여러 프로세스가 데이터를 공유하며 수행될 때, 각 프로세스에서 공유 데이터를 엑세스하는 프로그램 코드 부분 공유데이터를 여러 프로세스가 동시에 엑세스하면 시간적인 차이 때문에 원하는 결과를 얻을 수 없을수도 있다. 이를 막기위해 한 프로세스가 임계구역을 실행하고 있을 때, 다른 프로세스는 그 데이터에 접근할 수 없도록 해야한다. 임계영역의 동시 접근을 막기위해 lock, 세마포어, 모니터 등을 사용한다.

데드락

데드락이란?

데드락은 프로세스가 자원을 얻지 못해서 다음 처리를 하지 못하는 상태로 ‘교착 상태’ 라고도 부른다. 시스템적으로 한정된 자원을 여러곳에서 사용하려고 할 때 발생

주로 발생하는 경우

멀티 프로그래밍 환경에서 한정된 자원을 얻기 위해 서로 경쟁하는 상황에서 한 프로세스가 자원을 요청했을 때, 동시에 그 자원을 사용할 수 없는 상황이 발생할 수 있다. 이때 프로세스는 대기상태로 돌아가고, 대기상태의 프로세스들이 실행 상태로 변경될 수 없을 때 데드락이 주로 발생된다.

데드락 발생 조건

4가지 모두 성립해야 데드락이 발생

  1. 상호 배제 자원은 한번에 한 프로세스만 사용할 수 있음
  2. 점유 대기 최소한 하나의 자원을 점유하고 있으면서 다른 프로세스에 할당되어 사용하고 있는 자원을 추가로 점유하기 위해 대기하는 프로세스가 존재해야 함
  3. 비 선점 다른 프로세스에 할당된 자원은 사용이 끝날 때 까지 강제로 뺏을 수 없음
  4. 순환 대기 프로세스 집합에서 순환 형태로 자원을 대기하고 있어야 함

데드락 해결 방법

  1. 예방 교착상태 발생조건 중 하나를 제거해서 해결한다. ( 자원의 낭비가 심하다 )
    • 상호배제 부정 : 여러 프로세스가 공유 자원 사용
    • 점유대기 부정 : 프로세스 실행 전 모든 자원을 할당
    • 비 선점 부정 : 자원 점유 중인 프로세스가 다른 자원을 요구할 때 가진 자원 반납
    • 순환대기 부정 : 자원에 고유 번호를 할당한 후 순서대로 자원 요구
  2. 회피 교착 상태 발생시 피해나가는 방법 은행원 알고리즘
    • 은행에서 모든 고객의 요구가 충족되도록 현금을 할당하는데서 유래
    • 프로세스가 자원을 요구할 때, 할당한 후에 안정상태인지 사전에 검사하여 한정상태일때만 자원을 할당, 아니면 다른 프로세스들이 자원 해지까지 대기

동기와 비동기

동기 (synchronous) : 요청을 보낸 후 응답을 받아야 다음 동작을 수행 비 동기 (Asynchronous) : 요청을 보낸 후 응답과는 상관없이 다음 동작을 수행

페이징과 세그먼테이션

페이징 기법 : 프로세스를 일정 크기인 페이지로 잘라서 메모리에 적재하는 방식 세그먼테이션 기법 : 논리적 내용 단위인 세그먼트로 잘라 보관하는 방식

This post is licensed under CC BY 4.0 by the author.

[Web] Node.js 특징 및 장 단점

[프로그래머스] LV.3 블록 이동하기 (JS)

Comments powered by Disqus.