면접 준비 - 운영체제

jodbsgh·2022년 4월 10일
0

🔥"면접 준비"

목록 보기
3/10

운영체제란?

  • 시스템의 자원과 동작을 관리하는 소프트웨어이다.

  • 프로세스, 저장장치(RAM, HDD), 네트워킹, 사용자, 하드웨어를 관리한다.

메모리 구조

  • 메모리 공간 종류 4가지 :Code, Data, Heap, Stack

  • 코드(Code) 영역
    우리가 작성한 소스코드가 들어 가는 부분. 즉, 실행할 프로그램의 코드가 저장되는 영역으로 텍스트(code)영역이라고도 부른다.
    코드영역은 실행 파일을 구성하는 명령어들이 올라가는 메모리 영역으로 함수, 제어문, 상수 등이 여기에 지정된다.

  • 데이터(Data) 영역
    전역변수와 static변수가 할당되는 영역
    프로그램의 시작과 동시에 할당되고, 프로그램이 종료되어야 메모리가 소멸되는 영역

import Foundation

var a: Int = 10;	// 데이터 영역에 할당
var b: Int = 20;	// 데이터 영역에 할당

func dataFunc()  -> Bool {
    return true
}
  • 스택(Stack) 영역
    프로그램이 자동으로 사용하는 임시 메모리 영역이다.
    함수 호출 시 생성되는 지역 변수와 매개변수가 저장되는 영역이고,
    함수 호출이 완료되면 사라집니다.
import Foundation

var a: Int = 10;	// 데이터 영역에 할당
var b: Int = 20;	// 데이터 영역에 할당

func dataFunc() -> Bool {

  someFunc1(3)
  someFunc2(5)

  return true
}

func someFunc1(c: Int) {
  int d = 30;	
  // 매개변수 c와 지역변수 d가 스택영역에 할당
}

void someFunc2(e: Int) {
  int f = 40;	
  // 매개변수 e와 지역변수 f가 스택영역에 할당
}
  • 힙(Heap) 영역
    프로그래머가 할당/해제하는 메모리 공간이다.
    Java에서는 가비지 컬렉터가 자동으로 해제합니다.
    이 공간에 메모리 할당하는 것을 동적 할당(Dynamic Memory Allocation)이라고도 부른다.

예를 들어 클래스, 클로저가 이 부분에 해당 된다.
런타임 시에 크기가 결정된다.

위의 HEAP과 STACK영역은 사실 같은 공간을 공유한다. HEAP이 메모리 위쪽 주소부터 할당되면 STACK은 아래쪽부터 할당되는 식이다. 그래서 각 영역이 상대 공간을 침범하는 일이 발생할 수 있는데 이를 각각 HEAP OVERFLOW, STACK OVERFLOW라고 칭합니다.

Stack 영역이 크면 클 수록 Heap 영역이 작아지고, Heap 영역이 크면 클수록 Stack 영역이 작아집니다.

프로세스, 스레드

  • 프로세스 : 실행중인 프로그램
  • 스레드 :프로세스 안에서 실행되는 흐름 단위
    프로세스는 메모리와 CPU를 프로세스마다 할당받아서 사용하는데 스레드는 프로세스 안에서 다른 스레드와 메모리와 CPU를 공유해서 사용합니다.

CPU스케줄러

준비큐 있는 프로세스에 대해 CPU 할당하는 방법

비선점 스케줄링[Non-preemptive scheduling]

  • FCFS(First Come First Served)
    먼저 CPU를 요청하는 프로세스를 먼저 처리하는 방식

  • SJP(Shortest Job First)
    버스트(실행에 걸리는) 시간이 짧은 프로세스부터 CPU를 할당한다.

선점 스케줄링[Preemptive scheduling]

높은 우선순위를 가지는 프로세스는 항상 먼저 스케줄되어야 한다.

  • SRT(Shortest Remaining Time)
    진행 중인 프로세스가 있어도, 최단 잔여시간인 프로세스를 위해 sleep시키고 짧은 프로세스를 먼저 할당한다.

  • RR(Round Robin)
    모든 프로세스가 같은 우선순위를 가지고, Time slice를 기반으로 스케줄링 한다.
    만약 설정하는 시간 즉, Time slice가 심하게 크다면 FCFS와 다를게 없다.
    Time Slice가 너무 작다면 불필요한 Context Swtich가 많이 일어난다.

  • Priority Scheduling(우선 순위 스케줄링)
    우선순위에 따라 스케줄링 하는 것.

가상 메모리란?

사용하는 부분만 메모리에 올리고, 나머지는 디스크에 보관

모든 프로세스에게 메모리를 할당하기에는 메모리의 크기가 한계가 있어 사용하는 방법입니다. 프로세스에서 사용하는 부분만 메모리에 올리고, 나머지는 디스크에 보관하는 기법을 가상메모리라고 합니다.

데드락이란?

프로세스가 자원을 얻지 못해 다음 작업을 못하는 상태

데드락 발생 조건

데드락은 아래 네 가지 조건이 동시에 성립 할 때 발생한다. 즉, 아래의 네 가지 조건 중 하나라도 성립하지 않도록 만든다면 데드락을 해결할 수 있다.

  • 상호 배제(Mutual exclusion) : 자원은 한 번에 한 프로세스만이 사용할 수 있어야 한다.

  • 점유 대기(Hold and wait) : 최소한 하나의 자원을 점유하고 있으면서 다른 프로세스에 할당되어 사용하고 있는 자원을 추가로 점유하기 위해 대기하는 프로세스가 있어야 한다.

  • 비선점(No preemption) : 다른 프로세스에 할당된 자원은 사용이 끝날 때 까지 강제로 빼앗을 수 없어야 한다.

  • 순환 대기(Circular wait) : 프로세스의 집합{P0, P1, ,...Pn}에서 P0는 P1이 점유한 자원을 대기하고 P1은 P2가 점유한 자원을 대기하고 P2...Pn-1은 Pn이 점유한 자원을 대기하여 Pn은 P0가 점유한 자원을 요구해야 한다.

정리.
데드락은 프로세스가 자원을 얻지 못해, 다음 작업을 못하는 상태입니다. 예들 들어보면, P1과 P2가 각각 자원 A와 B를 얻어야되는 데.
P1이 A를, P2가 B를 가지고 있어서, 서로 무한정 기다리는 상태를 데드락이라고 합니다. 데드락은 다음의 네가지 조건이 동시에 발생해야 가능합니다. 그 네 가지는 상호 배제, 점유 대기, 비선점, 순환 대기 입니다.

profile
어제 보다는 내일을, 내일 보다는 오늘을 🚀

0개의 댓글