경쟁상태(Race Condition)

Q. 경쟁상태(Race Condition)이란 무엇인가요?

  • 프로세스가 어떤 순서로 데이터에 접근하느냐에 따라 결과값이 달라질 수 있는 상황을 말합니다.
  • 둘 이상의 입력이나 조작이 동시에 일어나 의도하지 않은 결과를 가져오는 경우를 말합니다.
  • 동시 접근 시 자료의 일관성을 해치는 결과가 나타날 수 있습니다.
  • 경쟁 상태도 교착상태의 종류 중에 하나입니다.

 

교착상태(DeadLock)

Q. 데드락(교착상태)이 무엇인가요? 발생 조건에 대해 말해주세요

  • 데드락은 프로세스가 자원을 얻지 못해서 다음 처리를 하지 못하는 상태를 말하며, 시스템적으로 한정된 자원을 여러 곳에서 사용하려고 할 때 발생합니다.
  • 발생 조건으로는 상호 배제, 점유 대기, 비선점, 순환 대기 모두가 성립해야 합니다.
    • 상호 배제 : 자원은 한 번에 한 프로세스만 사용할 수 있음
    • 점유 대기 : 최소한 하나의 자원을 점유하고 있으면서 다른 프로세스에 할당되어 사용하고 있는 자원을 추가로 점유하기 위해 대기하는 프로세스가 존재해야 함
    • 비선점 : 다른 프로세스에 할당된 자원을 사용이 끝날 때까지 강제로 빼앗을 수 없음
    • 순환 대기 : 프로세스 집합에서 순환 형태로 자원을 대기하고 있어야 함

 

Q. 회피 기법인 은행원 알고리즘이 무엇인가요?

  • 운영체제를 안전상태를 유지할 수 있는 요구만을 수락하고 불안전 상태를 초래할 사용자의 요구는 나중에 만족될 수 있을 때까지 계속 거절합니다.

+ 안전상태와 불안전상태

안전상태 불안전상태
교착상태가 일어날 가능성 없음
프로세스가 요구한 양만큼 자원 할당 가능
안전 순서열 존재함
교착상태가 일어날 가능성 있음
프로세스가 요구한 양만큼 자원 할당 불가능
안전 순서열 존재안함

시스템은 안전상태에서 불안정 상태로 변할 수 있다.

 

Q. 교착상태 해결방안은 무엇이 있나요?

  • 교착상태 예방, 회피, 탐지, 회복이 있습니다.
    • 예방 : 교착 상태 발생 조건 중 하나를 제거하면서 해결한다(자원 낭비 심함)
    • 회피 : 교착 상태 발생 시 피해나가는 방법
    • 탐지 : 자원 할당 그래프를 통해 교착 상태를 탐지해 그에 대한 오버헤드 발생함
    • 회복 : 교착 상태를 일으킨 프로세스를 종료하거나, 할당된 자원을 해제시켜 회복시키는 방법

 

세마포어(Semaphore)와 뮤텍스(Mutex)

Q. 세마포어(Semaphore)와 뮤텍스(Mutex)의 공통점과 차이점은 무엇인가요?

  • 둘 다 병행 처리를 위한 프로세스 동기화 기법입니다. (여러 프로세스나 쓰레드가 공유 자원에 접근하는 것을 제어하기 위한 방법)
  • 세마포어는 공유 자원에 세마포어의 변수만큼의 프로세스(or 쓰레드)에 접근할 수 있습니다. 반면에 뮤텍스는 오직 1개만의 프로세스(or 쓰레드)만 접근할 수 있습니다.
  • 현재 수행중인 프로세스가 아닌 다른 프로세스가 세마포어를 해제할 수 있습니다. 하지만 뮤텍스는 락(lock)을 획득한 프로세스가 반드시 그 락을 해제해야 합니다.

세마포어 P(임계 구역 들어가기 전에 수행),V(임계 구역에서 나올 때 수행) 연산

뮤텍스 : 접근 조율을 위해 락(lock)과 해제(unlock) 사용, 상태가 1과 0로 이진 세마포어로 부르기도 함

세마포어와 뮤텍스 참고자료

 

Q. 임계구역(Critical Section)이란 무엇인가요?

  • 각 프로세스에서 공유 데이터를 접근하는 프로그램 코드 부분으로 한 프로세스가 임계 구역을 수행할 때는 다른 프로세스가 접근하지 못하도록 해야 합니다.

반응형

Q. CPU 스케줄링이란 무엇이고 왜 필요한가?

  • 프로세스가 최고의 성능을 내기 위해 자원을 어떤 프로세스에 얼마나 할당하는지 정책을 만드는 것CPU 스케줄링이라고 합니다. 프로세스들이 CPU를 효율적으로 사용하기 위해 필요합니다.
  • 선점 스케줄링과 비선점 스케줄링이 있습니다.

 

Q. 선점형 스케줄링은 무엇이고 알고리즘은 무엇이 있나요?

  • 프로세스가 CPU를 할당받아 실행중이더라도 운영체제가 CPU를 강제로 빼앗을 수 있는 방식으로 CPU 처리 시간이 매우 긴 프로세스가 CPU 사용 독점을 막을 수 있어 효율적인 운영이 가능합니다. 하지만 잦은 문맥 교환으로 오버헤드가 많이 발생합니다.
  • 선점형 알고리즘으로는 SRT, 라운드로빈, 다단계큐, 다단계 피드백 큐 스케줄링이 존재합니다.
    1. SRT(Shortest Remaining Time) 스케줄링 : 짧은 시간 순서대로 프로세스를 수행합니다. 남은 처리 시간이 더 짧은 프로세스가 준비 큐에 들어오면 그 프로세스가 바로 선점됩니다. SJF의 선점 버전이라고 할 수 있습니다.
    2. 라운드로빈(Round-Robin, RR) 스케줄링 : 각 프로세스는 같은 크기의 CPU 시간을 할당 받고 선입선출에 의해 행된다. 할당시간이 너무 크면 선입선출과 다를 바가 없어지고, 너무 작으면 문맥교환이 잦아져 오버헤드가 증가합니다.
    3. 다단계 큐(Muti-level Queue) 스케줄링 : 우선순위에 따라 준비큐를 여러 개 사용하는 방법으로 각각의 큐는 자신의 스케줄링 알고리즘을 수행하며, 큐와 큐 사이에도 우선순위를 부여합니다.
    4. 다단계 피드백 큐 스케줄링 : 다단계 큐와 비슷하나 프로세스들이 큐를 이동할 수 있습니다.

 

Q. 비선점형 스케줄링은 무엇이고 알고리즘은 무엇이 있나요?

  • 프로세스가 CPU를 점유하고 있다면 이를 빼앗을 수 없는 방식으로 필요한 문맥 교환만 일어나기 때문에 오버헤드가 상대적으로 적지만 프로세스의 배치에 따라 효율성 차이가 많이 납니다.
  • 비선점형 알고리즘으로는 FIFO, SJF, HRN, 우선순위 스케줄링이 존재합니다.
    1. FIFO=FCFS(First Come First Served) 스케줄링 : 선입선출 방식으로, 준비 큐에 도착한 순서대로 CPU를 할당합니다. 작업 완료 시간을 예측하기는 용이하나 덜 중요한 작업이 중요한 작업을 기다리게 할 수 있습니다.
    2. SJF(Shortest Job First) 스케줄링 : 준비 큐에 있는 프로세스 중 실행시간이 가장 짧은 작업부터 CPU를 할당합니다. 평균 대기 시간을 감소시킵니다.
    3. HRN(Hightest response ratio next) 스케줄링 : SJF + Aging을 합친 알고리즘으로, 실행시간과 대기 시간을 모두 고려해 우선순위를 정합니다.
    4. 우선순위(priority) 스케줄링 : 프로세스에게 우선순위를 부여하여 우선순위가 높은 순서대로 처리합니다. SJF, HRN, SRTF도 우선순위 스케줄링 알고리즘의 일종입니다.

 

Q. 비선점형 SJF와 선점형 SRT 비교하시오

  • 비선점 스케줄링 SJF 기법을 선점 형태로 변경한 기법이 SRT이다.
  • SJF는 실행시간이 가장 짧은 프로세스
  • SRT는 현재 실행중인 프로세스의 남아 있는 실행 시간과 새로운 프로세스의 실행 시간을 비교하여 짧은 것

ex) 아래와 같은 세가지 작업이 있다고 가정한다.

비선점형 SJF(Shortest Job First)의 경우

작업시간이 짧은게 우선이지만, 비선점형이기 때문에 시작한건 끝내야됨

선점형 SRT(Shortest Remaining Time)의 경우

작업시간이 짧은게 우선이지만, 선점형이기 때문에 남은 작업이 짧은 것이 우선이다

 

참고자료 : CPU스케줄링, [IT 기술면접 준비자료] CPU 스케줄링 기법, 선점, 비선점 스케줄링

반응형

Q. IPC(Inter Process Communication)이란 무엇인가요?

프로세스 간에 서로 데이터를 주고받는 방법을 말합니다. 프로세스는 커널이 제공하는 IPC설비를 이용하여 프로세스 간 통신을 할 수 있습니다. 대표적으로 메시지 교환과 데이터 공유 방법이 있습니다.

  1. Message passing : 커널(OS)가 메모리 보호를 위해 대리 전달해주는 것을 말합니다. 따라서 안전하고 동기화 문제가 없습니다. 하지만 성능이 떨어진다는 단점을 가지고 있습니다.
  2. shared memory : 두 프로세스간의 공유된 메모리를 생성 후 이용하는 것을 말합니다. 성능은 좋지만 동기화의 문제가 발생합니다.

  동기화(Synchronization), 두 개의 프로세스 A,Bshared memory를 이용해 데이터를 주고받을 때 A가 쓰면 B가 읽어가야 하는데 A가 쓰고 난 뒤인지 전인지 알 수 있는 방법이 없다. 그래서 A가 다 썼다고 알려줘야 B가 읽어갈 수 있다. 이와 같이 프로세스 또는 스레드들이 수행되는 시점을 조절하는 것이 동기화이다.

반응형

Q. PCB(Process Control Block)란 무엇이고 왜 필요한가요?

  • 운영체제가 프로세스를 제어하기 위해 이전 작업에 대한 정보를 저장해 놓은 곳으로, 프로세스 메타데이터(상태 정보)들을 저장하는 구조체입니다. 이것은 프로세스 상태관리와 문맥교환(Context Switching)을 위해 필요합니다.

+ PCB에 저장되는 정보는?

PID(프로세스 고유번호), 상태(준비, 대기, 실행...), 포인터, 우선순위, 레지스터 관련 정보 등등

 

+ Context Switching?

CPU가 이전의 프로세스 상태를 PCB에 보관하고, 또 다른 프로세스의 정보를 PCB에서 읽어 레지스터에 적재하는 과정을 말합니다.

ex) 인터럽트 발생, 실행 중인 cpu 사용 허가시간 모두 소모, 입출력을 위해 대기하는 경우 등

반응형

'cs지식 > Operating System' 카테고리의 다른 글

[OS] CPU스케줄링  (0) 2021.01.25
[OS] IPC(Inter Process Communication)  (0) 2021.01.20
[OS] 시스템 콜(System Call)  (0) 2021.01.20
[OS] 인터럽트(Interrupt)  (0) 2021.01.15
[OS] 프로세스 주소 공간  (0) 2021.01.14

Q. 시스템 콜이란 무엇인가요?

  • 시스템 콜이란 운영체제의 커널이 제공하는 서비스에 대해, 응용 프로그램의 요청에 따라 커널에 접근하기 위한 인터페이스입니다.
  • 시스템 콜의 유형으로는 프로세스 제어, 파일 조작, 장치 조작, 정보 유지보수, 통신과 보호로 나눌 수 있다.

 

ex) 프로세스 제어를 위한 system call

  • fork() : 자식 프로세스 생성
  • exec() : 자신을 수행 가능한 다른 프로세스로 대치 수행
  • wait() : 프로세스 종료시까지 대기
  • + pipe, signal, exit, open, create, close, read, write ...
반응형

'cs지식 > Operating System' 카테고리의 다른 글

[OS] IPC(Inter Process Communication)  (0) 2021.01.20
[OS] PCB와 Context Switching  (0) 2021.01.20
[OS] 인터럽트(Interrupt)  (0) 2021.01.15
[OS] 프로세스 주소 공간  (0) 2021.01.14
[OS] 프로세스와 스레드  (0) 2021.01.14

Q. 인터럽트란 무엇인가요?  ->끼어들기

  • CPU가 프로그램을 실행하고 있을 때, 입출력 하드웨어 등의 장치나 예외상황이 발생하여 처리가 필요한 경우, 현재 실행중인 프로그램 수행을 미루고 다른 프로그램의 수행을 요구하는 명령입니다.
  • 하드웨어 인터럽트와 소프트웨어 인터럽트로 나뉘며 소프트웨어 인터럽트의 예로는 예외상황(exception)과 시스템 콜(system call)이 있습니다.

 

Q. 인터럽트 처리과정에 대해서 설명해주세요

  • 요청-중단-보관-처리-재개
  • 인터럽트가 발생하면 현재 수행중인 프로그램을 멈추고, 레지스터와 PC(Program Counter)을 저장한 뒤에 인터럽트 서비스 루틴(ISR)을 실행합니다. 인터럽트 처리가 완료되면 저장한 정보를 복구하고 수행 중이던 프로그램을 실행합니다.

 

반응형

'cs지식 > Operating System' 카테고리의 다른 글

[OS] PCB와 Context Switching  (0) 2021.01.20
[OS] 시스템 콜(System Call)  (0) 2021.01.20
[OS] 프로세스 주소 공간  (0) 2021.01.14
[OS] 프로세스와 스레드  (0) 2021.01.14
[OS] 운영체제란  (0) 2021.01.02

Q. 프로세스 주소 공간에 무엇이 있는지 설명해주세요

-> 코드, 데이터, 스택 영역이 존재하며 코드는 프로그램의 코드가 저장되어있고, 데이터는 전역변수가, 스택에는 함수나 지역변수가 저장되어 있습니다.

-> 프로그램이 CPU에 의해 실행되면 프로세스가 생성되고 메모리에 프로세스 주소공간이 할당됩니다주소공간은 코드데이터스택으로 이루어져있습니다. 이 프로세스의 메타데이터들은 PCB에 저장됩니다.

 

Q. 프로세스 주소 공간을 나눈 이유는 무엇인가요?

  • 최대한 데이터를 공유하여 메모리 사용량을 줄이기 위해서
  • code는 프로그램이 만들어지고 나서 바뀔일이 없기 때문에 프로그램의 프로세스일 경우 코드 부분을 공유하여 메모리의 사용량을 줄이기 위해 분리했습니다.
  • stack과 data는 함수 외부와 함수에 따라서 stack 구조 활용을 위해 나누었습니다.
반응형

'cs지식 > Operating System' 카테고리의 다른 글

[OS] PCB와 Context Switching  (0) 2021.01.20
[OS] 시스템 콜(System Call)  (0) 2021.01.20
[OS] 인터럽트(Interrupt)  (0) 2021.01.15
[OS] 프로세스와 스레드  (0) 2021.01.14
[OS] 운영체제란  (0) 2021.01.02

Q3. 프로세스와 스레드를 설명해주세요

-> 프로세스는 프로그램 실행단위이며, 스레드는 프로세스 내에서 실행되는 흐름의 단위를 말합니다.

+ 프로세스와 스레드 둘의 차이는 무엇인가요?

이 둘의 가장 큰 차이점은 메모리 영역 할당의 차이입니다. 프로세스는 자신만의 고유 공간과 자원을 할당받는 반면, 스레드는 프로세스 내에서 스택을 제외한 코드, 데이터, 힙 메모리를 공유합니다.

 

※ 프로세스와 스레드 구조  

  •  프로세스는 프로세스 당 최소 1개의 스레드를 소유
  • 프로세스는 각각 별도의 주소 공간의 할당(독립적)
  • Code : 코드 자체를 구성하는 메모리 영역(프로그램 명령)
  • Data : 전역변수, 정적 변수, 배열 등 (초기화된 데이터)
  • Heap : 동적 할당 시 사용 (new(), mallock() 
  • Stack : 지역변수, 매개변수, 리턴 값 (임시 메모리 영역)

 

+ 스택을 스레드마다 독립적으로 할당하는 이유는?

 스택은 함수 호출 시 전달되는 인자, 되돌아갈 주소값 및 함수 내에서 선언하는 변수 등을 저장하기 위해 사용되는 메모리 공간이므로 스택 메모리 공간이 독립적이라는 것은 독립적인 함수 호출이 가능하다는 것이고 이는 독립적인 실행 흐름이 추가되는 것이다. 따라서 스레드의 정의에 따라 독립적인 실행 흐름을 추가하기 위한 최소 조건으로 독립된 스택을 할당한다.

++ 자바 스레드란 : 자바에서는 프로세스가 존재하지 않고 스레드만 존재합니다. 스레드 스케쥴링은 JVM이 담당합니다.

+++ JVM(Java Virtual Machine)이란? : 자바 어플리케이션을 클래스 로더를 통해 읽어 들여 자바 API와 함께 실행하는 것입니다. 메모리 관리, garbage collection을 수행하고 스택기반의 가상머신입니다.

 

Q4. 멀티 프로세스와 멀티 스레드의 장단점에 대하여 설명해주세요

-> 멀티 스레드는 멀티 프로세스보다 적은 메모리 공간을 차지하고 문맥 전환이 빠르다는 장점이 있지만, 오류로 인해 하나의 스레드가 종료되면 전체 스레드가 종료될 수 있다는 점과 동기화 문제를 가지고 있습니다.

반면 멀티 프로세스 방식은 하나의 프로세스가 죽더라도 다른 프로세스에는 영향을 끼치지 않고 정상적으로 수행된다는 장점이 있지만, 멀티 스레드보다 많은 메모리 공간과 CPU 시간을 차지한다는 단점이 있습니다.

때문에 대상 시스템의 특징에 따라 적합한 동작 방식을 선택하고 적용해야 합니다.

+

 

멀티 프로세스

멀티 스레드

장점

안전성(하나 프로세스 죽어도 다른 곳에 영향 안 끼침)

독립적인 프로세스에 비해 공유 메모리만큼의 시간, 자원 손실 감소, heap, data 영역을 통해 데이터를 주고받을 수 있어 스레드 간 통신 방법이 훨씬 간단하다.

단점

각각 독립된 메모리 영역을 가지고 있어 멀티스레드보다 많은 메모리 공간, CPU차지
-> 작업량이 많을수록 오버헤드 발생, context switching으로 인한 성능 저하

안전성 문제(오류로 인해 하나의 스레드가 종료되면 전체 스레드가 종료 될 수 있다)
-> critical section 기법을 통해 대비함

+ 멀티스레드에서 동기화를 하는 이유?

-> 멀티 스레드를 사용하는 프로그램에서 두 개 이상의 스레드가 공유 데이터에 접근할 때, 작업 처리 순서를 컨트롤 하고 공유 자원에 대한 접근을 컨트롤하기 위해 동기화가 필요합니다.

이로 인해 병목 현상이 발생하여 성능이 저하될 가능성이 높기 때문에 과도한 락으로 병목현상을 줄여야 한다.

 

+ context switching가 무엇이고 이것이 필요한 이유는?

-> 현재 진행하고 있는 task(process, thread)의 상태를 저장하고 다음 진행할 task의 상태 값을 읽어 적용하는 과정을 말하고, 이것이 있어야 CPUtask를 바꿔가며 실행할 수 있습니다.

 

++ processthread context switching의 비용이 더 많이 드는 것은?

-> process, thread의 경우 stack 영역을 제외한 모든 메모리를 공유하기 때문에 context switching 발생 시 stack 영역만 변경을 진행하면 된다.

 

+ critical section(임계영역)이란?

-> 멀티 스레드 시 하나의 스레드가 공유 데이터 값을 변경하는 시점에 다른 스레드가 그 값을 읽으려할 때 발생하는 문제를 해결하기 위한 동기화 과정

 

반응형

'cs지식 > Operating System' 카테고리의 다른 글

[OS] PCB와 Context Switching  (0) 2021.01.20
[OS] 시스템 콜(System Call)  (0) 2021.01.20
[OS] 인터럽트(Interrupt)  (0) 2021.01.15
[OS] 프로세스 주소 공간  (0) 2021.01.14
[OS] 운영체제란  (0) 2021.01.02

+ Recent posts