운영체제란 무엇인가?

만들어진 이유

컴퓨터의 역사를 거슬러 올라가면, 초기의 컴퓨터는 사용자가 직접 모든 하드웨어 자원을 제어하고 프로그램을 실행하는 매우 불편한 방식이었다. 마치 자동차 운전석에 앉아 핸들을 돌리는 것뿐만 아니라, 엔진에 연료를 직접 주입하고 기계 부품 하나하나를 손으로 조작해야 하는 상황과 같았다. 이러한 비효율성을 해결하고, 사용자가 하드웨어를 신경 쓰지 않고도 손쉽게 프로그램을 실행할 수 있도록 자원 관리의 추상화를 담당하는 소프트웨어가 필요하게 되었는데, 이것이 바로 **운영체제(Operating System, OS)**의 탄생 배경이다.

운영체제는 컴퓨터 시스템의 하드웨어와 소프트웨어 자원을 관리하고, 사용자에게 편리한 인터페이스를 제공하는 핵심 소프트웨어다. 흔히 사용하는 윈도우, macOS, 안드로이드, iOS 등이 모두 운영체제에 해당한다. 운영체제는 컴퓨터의 모든 자원을 총괄하는 지휘자와 같은 역할을 수행한다.

핵심 역할

  1. 자원 관리: CPU, 메모리, 저장장치, 네트워크 등 컴퓨터 시스템의 모든 하드웨어 자원을 효율적으로 관리하고 분배한다.

  2. 프로세스 관리: 여러 프로그램이 동시에 실행될 수 있도록 프로세스를 생성, 제어, 종료하는 역할을 한다. CPU 시간을 적절히 할당하여 여러 작업을 동시에 수행하는 것처럼 보이게 한다.

  3. 메모리 관리: 프로그램이 실행될 때 필요한 메모리 공간을 할당하고, 메모리 주소를 관리하여 다른 프로그램의 메모리 영역을 침범하지 않도록 보호한다.

  4. 파일 시스템 관리: 데이터를 디스크에 저장하고 불러오는 과정을 관리한다. 파일과 디렉터리를 체계적으로 구성하고, 접근 권한을 제어하여 데이터의 무결성을 유지한다.

  5. 사용자 인터페이스 제공: 사용자가 컴퓨터와 상호작용할 수 있는 환경(GUI 또는 CLI)을 제공한다.

프로그램의 메모리 사용 구조 이해하기

프로그램이 실행되면 운영체제는 해당 프로그램을 위한 메모리 공간을 할당하는데, 이 공간은 크게 네 가지 영역으로 나뉜다. 이 구조는 프로그램의 종류나 언어와 무관하게 모든 프로그램에 공통적으로 적용되며, 효율적인 메모리 관리를 위해 설계되었다.

4가지 메모리 영역

  1. 코드(Code) 영역:

    • 정적 할당: 프로그램의 소스 코드가 컴파일된 기계어 코드가 저장되는 공간이다.

    • 특징: 실행 파일의 형태로 존재하며, 읽기 전용으로 설정되어 있어 프로그램 실행 중에는 내용이 변경되지 않는다. 다른 영역에 비해 크기가 고정되어 있다.

  2. 데이터(Data) 영역:

    • 정적 할당: 전역 변수, 정적 변수(static), 배열 등 프로그램이 시작될 때부터 종료될 때까지 메모리에 상주하는 데이터가 저장된다.

    • 특징: 읽기/쓰기가 가능한 영역이며, 프로그램 시작과 함께 할당되고 종료 시 해제된다. 변수 초기화 여부에 따라 초기화된 데이터 영역과 초기화되지 않은 데이터 영역으로 세분화될 수 있다.

  3. 힙(Heap) 영역:

    • 동적 할당: 프로그램 실행 중 사용자의 요청에 따라 동적으로 메모리를 할당하는 공간이다. C++의 new, C의 malloc(), 자바스크립트의 객체 등이 이 영역에 할당된다.

    • 특징: 프로그래머가 직접 관리(할당 및 해제)해야 하는 영역이다. 크기가 고정되어 있지 않고, 메모리가 낮은 주소에서 높은 주소 방향으로 동적으로 증가한다. 관리 소홀 시 **메모리 누수(Memory Leak)**가 발생할 수 있다.

  4. 스택(Stack) 영역:

    • 동적 할당: 함수 호출 시 생성되는 지역 변수, 매개 변수, 반환 주소 등이 저장되는 공간이다.

    • 특징: 후입선출(LIFO, Last-In, First-Out) 방식의 자료구조다. 함수가 호출될 때마다 프레임(stack frame)이 쌓이고, 함수 실행이 끝나면 프레임이 제거된다. 컴파일 타임에 크기가 결정되며, 메모리가 높은 주소에서 낮은 주소 방향으로 증가한다. **스택 오버플로우(Stack Overflow)**는 이 영역의 메모리가 한계를 초과했을 때 발생하는 오류다.

힙과 스택의 차이: 힙과 스택은 모두 동적 메모리 할당을 담당하지만, 할당 주체와 관리 방식에서 큰 차이를 보인다. 스택은 시스템에 의해 자동으로 관리되므로 빠르지만, 크기에 제한이 있다. 반면 힙은 프로그래머가 직접 관리해야 하므로 번거롭지만, 스택보다 훨씬 큰 메모리 공간을 자유롭게 활용할 수 있다.

프로세스와 스레드: 누가, 무엇을 하는가?

프로세스와 스레드는 기술 면접에서 가장 많이 혼동되는 개념 중 하나다. 이 둘은 **“작업을 수행하는 단위”**라는 공통점을 가지지만, 그 규모와 역할에서 명확한 차이가 있다.

프로세스 (Process)

프로세스는 ‘실행 중인 프로그램’이다. 우리가 컴퓨터에서 웹 브라우저, 음악 재생기, 게임 등을 실행할 때마다 각각의 독립적인 프로세스가 생성된다. 운영체제로부터 독립적인 메모리 공간(코드, 데이터, 힙, 스택)을 할당받으며, 이 공간을 다른 프로세스와 공유하지 않는다.

  • 특징:

    • 독립성: 각 프로세스는 독립적인 메모리 공간을 가진다. 한 프로세스가 비정상적으로 종료되어도 다른 프로세스에 영향을 주지 않는다.

    • 자원 소모: 프로세스 생성 시 운영체제로부터 독립적인 자원을 할당받아야 하므로 상대적으로 많은 자원과 시간이 소모된다.

    • 프로세스 간 통신(IPC): 독립적인 메모리를 사용하므로, 프로세스 간에 정보를 공유하려면 파이프, 메시지 큐, 공유 메모리 등 별도의 통신 메커니즘이 필요하다.

스레드 (Thread)

스레드는 ‘프로세스 내에서 실행되는 실행 단위’이다. 마치 하나의 프로세스(예: 웹 브라우저)가 여러 개의 작은 작업(탭 열기, 동영상 재생, 스크롤)을 동시에 처리하는 것과 같다. 이 작은 작업 하나하나가 스레드에 해당한다.

  • 특징:

    • 자원 공유: 하나의 프로세스에 속한 여러 스레드는 프로세스의 코드, 데이터, 힙 영역을 공유한다.

    • 독립성: 스레드마다 고유한 스택을 가지며, 스택 내의 지역 변수나 함수 호출 정보는 다른 스레드와 공유하지 않는다.

    • 경량성: 프로세스보다 훨씬 가벼운 단위로, 스레드 생성 및 전환에 드는 비용이 적다. 스레드 간의 데이터 공유가 용이하여 통신 비용도 낮다.

면접 답변 예시

면접관: 프로세스와 스레드의 차이점을 설명해 주세요.

답변: 프로세스는 운영체제로부터 독립된 메모리 공간을 할당받는 실행 중인 프로그램이며, 스레드는 그 프로세스 내에서 실행되는 여러 실행 흐름의 단위입니다. 가장 큰 차이는 자원 공유 여부에 있습니다. 프로세스는 각각 독립된 메모리 공간을 가지므로 다른 프로세스와 자원을 공유하지 않는 반면, 스레드는 같은 프로세스에 속한 다른 스레드와 코드, 데이터, 힙 영역을 공유합니다. 이 때문에 스레드 간 통신은 빠르지만, 한 스레드의 오류가 전체 프로세스에 영향을 줄 수 있다는 단점이 있습니다.

CPU 스케줄러: 효율적인 자원 분배의 지휘자

CPU 스케줄러는 준비 큐(Ready Queue)에 있는 수많은 프로세스 중 어떤 프로세스에게 CPU를 할당할지 결정하는 운영체제의 핵심 모듈이다. 스케줄링의 목표는 단순히 프로세스를 실행하는 것을 넘어, 시스템의 효율성을 극대화하는 데 있다.

스케줄링의 목표

  • 처리량 극대화(Throughput): 단위 시간당 처리하는 작업의 수를 늘린다.

  • 응답 시간 최소화(Response Time): 사용자의 요청에 빠르게 응답한다.

  • 대기 시간 최소화(Waiting Time): 프로세스가 준비 큐에서 대기하는 시간을 줄인다.

  • CPU 이용률 극대화(CPU Utilization): CPU가 최대한 유휴 상태 없이 바쁘게 일하도록 한다.

  • 공정성(Fairness): 모든 프로세스에게 공평하게 CPU를 할당한다.

스케줄링 알고리즘 종류

스케줄링 알고리즘은 크게 선점(Preemptive) 방식과 비선점(Non-preemptive) 방식으로 나뉜다. 비선점 방식은 일단 CPU를 할당받은 프로세스가 종료되거나 자발적으로 CPU를 반납할 때까지 다른 프로세스가 끼어들 수 없다. 선점 방식은 우선순위가 높은 다른 프로세스가 나타나면 실행 중인 프로세스를 중단시키고 CPU를 빼앗을 수 있다.

알고리즘 종류방식특징장단점
FCFS (First-Come, First-Served)비선점가장 먼저 도착한 프로세스를 먼저 처리한다.장점: 구현이 간단하다. 단점: 긴 작업이 먼저 도착하면 뒤의 짧은 작업들이 오래 기다리는 **호위 효과(Convoy Effect)**가 발생한다.
SJF (Shortest Job First)비선점가장 짧은 실행 시간을 가진 작업을 먼저 처리한다.장점: 평균 대기 시간이 가장 짧다. 단점: 실행 시간을 예측하기 어렵고, 긴 작업은 영원히 실행되지 못하는 **기아 현상(Starvation)**이 발생할 수 있다.
SRTF (Shortest Remaining Time First)선점SJF의 선점형 버전. 남은 실행 시간이 가장 짧은 프로세스를 먼저 처리한다.장점: SJF보다 평균 대기 시간이 더 짧다. 단점: 잦은 문맥 교환으로 인한 오버헤드가 발생하고, 마찬가지로 기아 현상이 발생할 수 있다.
라운드 로빈 (Round Robin, RR)선점모든 프로세스에 공평하게 정해진 시간(Time Slice)을 할당하여 순서대로 처리한다.장점: 공정성이 뛰어나고, 응답 시간이 빠르다. 단점: 시간 할당량이 너무 작으면 문맥 교환 오버헤드가 크고, 너무 크면 FCFS와 유사해진다.
우선순위 (Priority)선점/비선점각 프로세스에 우선순위를 부여하고, 높은 우선순위의 프로세스를 먼저 처리한다.장점: 중요도가 높은 작업을 빠르게 처리한다. 단점: 낮은 우선순위 작업이 무한정 대기하는 기아 현상이 발생할 수 있다. 이를 해결하기 위해 노화(Aging) 기법을 사용하기도 한다.

가상 메모리: 물리적 한계를 넘어서는 기술

우리가 사용하는 대부분의 프로그램은 실제 RAM 용량보다 훨씬 크다. 가상 메모리는 이러한 물리적 한계를 극복하기 위해 하드디스크의 일부를 마치 메모리처럼 사용하는 기술이다. 이 기술 덕분에 사용자는 메모리 용량에 구애받지 않고 여러 개의 큰 프로그램을 동시에 실행할 수 있다.

작동 원리

  1. 페이지(Page): 프로그램의 전체 주소 공간을 고정된 크기의 작은 블록으로 나눈 것을 페이지라 한다.

  2. 프레임(Frame): 실제 물리 메모리(RAM)의 빈 공간을 페이지와 같은 크기로 나눈 것을 프레임이라 한다.

  3. 페이지 테이블(Page Table): 가상 주소와 실제 물리 주소를 매핑하는 정보가 담긴 테이블이다. CPU가 생성한 가상 주소는 페이지 테이블을 거쳐 물리 주소로 변환된다.

  4. MMU(Memory Management Unit): CPU와 물리 메모리 사이에 위치하여 이 페이지 테이블을 이용해 주소 변환 작업을 하드웨어적으로 처리한다.

가상 메모리 기법의 핵심은 필요한 부분만 메모리에 올리는 것이다. 프로세스가 실행될 때 전체 프로그램을 메모리에 올리는 대신, 현재 당장 필요한 페이지들만 메모리(RAM)에 적재하고 나머지는 디스크(스왑 영역)에 보관한다. 만약 CPU가 아직 메모리에 없는 페이지를 요청하면, **페이지 폴트(Page Fault)**가 발생하여 운영체제가 해당 페이지를 디스크에서 찾아 메모리로 옮긴다. 이 과정을 **스와핑(Swapping)**이라 한다.

스와핑과 스래싱(Thrashing)

가상 메모리 시스템에서 페이지 폴트가 너무 자주 발생하여 CPU가 실질적인 작업은 거의 하지 못하고 페이지를 교체(스와핑)하는 데 대부분의 시간을 보내는 현상을 **스래싱(Thrashing)**이라고 한다. 스래싱은 시스템의 성능을 급격하게 저하시키므로, 운영체제는 페이지 교체 알고리즘(예: FIFO, LRU 등)을 통해 스래싱을 방지하려 노력한다.

교착 상태(데드락): 풀리지 않는 얽힘

**교착 상태(Deadlock)**는 두 개 이상의 프로세스가 서로 다른 프로세스가 점유하고 있는 자원을 요청하며 무한정 대기하는 상태를 말한다. 마치 외나무다리 위에서 서로 마주 본 두 사람이 상대방이 비켜주기만을 기다리며 멈춰 서 있는 상황과 유사하다.

데드락 발생의 4가지 필수 조건

데드락은 다음 네 가지 조건이 모두 동시에 충족될 때에만 발생한다. 이 중 하나라도 만족하지 않으면 데드락은 발생하지 않는다.

  1. 상호 배제(Mutual Exclusion): 한 번에 한 프로세스만이 자원을 사용할 수 있다. (예: 프린터, 특정 파일 등)

  2. 점유 및 대기(Hold and Wait): 최소한 하나의 자원을 점유하고 있는 상태에서 다른 프로세스가 점유하고 있는 자원을 추가로 할당받기 위해 대기한다.

  3. 비선점(No Preemption): 이미 할당된 자원은 해당 자원을 점유한 프로세스가 작업을 끝내고 자발적으로 반납할 때까지 강제로 빼앗을 수 없다.

  4. 순환 대기(Circular Wait): 자원 할당 그래프에서 프로세스와 자원의 순환(Cycle)이 형성된다. P1은 R1을 점유하고 R2를 대기하고, P2는 R2를 점유하고 R1을 대기하는 것처럼 서로가 서로를 기다리는 상황이다.

데드락 처리 전략

데드락을 해결하거나 방지하기 위해 운영체제는 다양한 전략을 사용한다.

  1. 데드락 예방(Prevention): 4가지 필수 조건 중 하나 이상을 애초에 발생하지 않도록 한다. 예를 들어, 모든 자원을 한 번에 할당하거나, 자원 점유 상태에서는 다른 자원을 요청하지 못하게 한다. 가장 확실한 방법이지만, 자원 활용도가 낮아지는 비효율을 초래할 수 있다.

  2. 데드락 회피(Avoidance): 시스템의 상태가 교착 상태가 될 가능성을 미리 파악하여 안전한 상태(Safe State)에 머무르도록 자원 할당을 조절한다. **은행가 알고리즘(Banker’s Algorithm)**이 대표적이다.

  3. 데드락 탐지(Detection): 데드락이 발생할 때까지 기다린 후, 주기적으로 시스템의 상태를 검사하여 교착 상태가 발생했는지 탐지한다. 자원 할당 그래프를 이용해 순환(Cycle)이 있는지 확인하는 방법이 있다.

  4. 데드락 회복(Recovery): 데드락이 탐지되면 이를 해결하기 위해 강제로 프로세스를 종료하거나, 자원을 선점하여 데드락을 해소한다. 이 방법은 자원 낭비가 발생할 수 있다.

마지막으로

기술 면접은 단순히 암기한 지식을 묻는 자리가 아니라, 해당 개념을 얼마나 깊이 이해하고 있는지를 평가하는 과정이다. 위에서 다룬 개념들은 운영체제의 근간을 이루는 핵심이며, 각 개념의 원리와 함께 장단점, 그리고 서로 간의 관계를 유기적으로 이해하는 것이 중요하다. 이 핸드북이 여러분의 면접 준비에 큰 도움이 되길 바란다. 추가로 궁금한 점이 있다면 언제든 자유롭게 질문해 주면 좋다.

==💻 기술 면접 대비: 운영체제 핵심 요약 (자모)==

1. ⚙️ 운영체제 개요

1. 정의 및 역할

  • 시스템의 자원과 동작을 관리하는 ==소프트웨어==
  • ==CPU==, ==메모리 등 하드웨어 관리==
  • ==프로세스==, ==저장장치==, ==네트워킹==, ==사용자 관리==

2. 예시

  • ==PC==: 윈도우, macOS
  • ==모바일==: 안드로이드, iOS

2. 🧠 메모리 구조

1. 코드 영역

  • ==소스 코드 저장==

2. 데이터 영역

  • ==전역 변수==, ==정적 변수 저장==

3. 힙(Heap) 영역

  • 사용자가 ==동적==으로 할당하는 메모리 공간
  • _런타임_에 크기 결정

4. 스택(Stack) 영역

  • ==함수 호출 정보==, ==지역 변수==, ==매개변수 저장==
  • ==컴파일 타임에 크기 결정==
  • 스택 자료구조 활용 (LIFO: Last-In, First-Out)

3. 🔄 프로세스와 스레드

1. 프로세스

  • ==실행 중인 프로그램==
  • 독립된 메모리 할당

2. 스레드

  • 프로세스 내에서 실행되는 ==실행 단위==
  • 코드, 데이터, 힙 영역 ==공유==
  • 스택 영역은 ==개별적==으로 관리

4. 🚦 CPU 스케줄링

1. 개요

  • ==준비 큐==에 있는 프로세스에 ==CPU==를 할당하는 방법

2. 선점 vs 비선점

  • ==선점==: CPU를 사용 중인 프로세스를 중단시키고 다른 프로세스에 할당
  • ==비선점==: CPU를 사용 중인 프로세스가 종료될 때까지 기다림

3. 주요 스케줄링 알고리즘

3.1. 비선점 방식

  • ==FCFS (First-Come, First-Served)==: 먼저 온 순서대로 처리
  • ==SJF (Shortest Job First)==: CPU 사용 시간이 짧은 프로세스 먼저 처리

3.2. 선점 방식

  • ==SRT (Shortest Remaining Time)==: 남은 시간이 짧은 프로세스 우선 처리
  • ==라운드 로빈 (Round Robin)==: 각 프로세스에 동일한 시간 할당 후 순환 실행
    • ==타임 퀀텀(Time Quantum)==: 각 프로세스에 할당되는 시간
    • 타임 퀀텀 크기 조절 중요 (너무 작으면 오버헤드 발생)
  • ==우선순위 스케줄링==: 우선순위가 높은 프로세스 먼저 할당

5. 💾 가상 메모리

1. 정의

  • 실제 메모리보다 큰 프로세스를 실행하기 위한 기술
  • ==디스크==의 일부 공간을 ==메모리==처럼 사용
  • 사용하는 부분만 메모리에 올리고, 나머지는 디스크에 보관

2. 페이지 테이블

  • 디스크의 페이지 위치 정보를 메모리 주소와 매핑

6. 🚫 데드락 (Deadlock)

1. 정의

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

2. 발생 조건 (모두 충족해야 함)

  • ==상호 배제 (Mutual Exclusion)==: 한 번에 하나의 프로세스만 자원 사용
  • ==점유 대기 (Hold and Wait)==: 자원 점유 후 다른 자원 대기
  • ==비선점 (No Preemption)==: 자원을 강제로 빼앗을 수 없음
  • ==순환 대기 (Circular Wait)==: 프로세스들이 순환적으로 자원을 요구하며 대기
graph LR
    A[Process 1] --> B(Resource A)
    B --> C[Process 2]
    C --> D(Resource B)
    D --> A
  • 이 핸드북은 운영체제 기술 면접에서 자주 출제되는 핵심 개념들을 깊이 있고 체계적으로 다룬다.

  • 운영체제의 기본 역할부터 메모리 구조, 프로세스와 스레드, CPU 스케줄링, 가상 메모리, 그리고 교착 상태까지 명확히 설명한다.

  • 각 주제별로 면접관의 질문에 답변할 수 있는 개념 정리와 심화 내용을 함께 제시하여 실질적인 면접 준비를 돕는다.

대본

으 [음악] 네 안녕하세요 자모 입니다 오늘은 이제 기술면접 첫 번째 운영체제 보려고 하는데요 어떤 방식으로 진행이 되요 진행을 하려고 하냐면 요 우선은 여 운영체제가 기술면접 에 각 과목에서 이제 가장 자주 나오는 질문들을 이제 가져왔어요 6개정도 그래서 6개의 대해서 개념을 설명하고 요 그 다음에 내가 면접을 본다면 날 이렇게 대답을 하겠다 예시 까지 보여드릴 거에요 근데 절대 6개 질문만 한다고 되는게 아니구요 된게 많은 질문들이 있어요 우선 제가 정리해둔 질문 리스트 2 하단에 첨부해 낮고 2디스크 리액션 에 넣어 놓았구요 이외에도 이제 검색해보시면 베개 많은 정보들이 있거든요 그래서 그거 참고 하셔서 공부를 해 주시면 됩니다 네 그러면 시작을 해볼게요 4 첫번째는 이제 운영체제 에요 운영체제는 자주 물어 보진 않는데 그래도 운영체제에 대해서 간단히 설명을 하고 가면 좋을 것 같아서 가져왔어요 4 운영체제가 뭐냐면 운영체제는 이제 시스템에 자원과 동작을 관리하는 소프트웨어 라고 보시면 되요 자 우리가 지금 이 지금 사용하고 있는 pc 나 이제 모바일을 보면은 5 pc 는 윈도우나 맥 이 되겠고 그리고 모바일 같은 경우 만들어 있 으나 매국 맥 ios 가 되겠죠 그래서 이런 시스템 들의 자원 자원 이라고 하면 여기서 cpu 나 메모리를 의미에요 그래서 자 우와 동작이라고 하면 뭐 1위가 프로그램을 실행하는 것을 의미 하겠죠 이런 것들을 관리하는 소프트웨어 다 그래서 이것도 소프트웨어 열쇠도 이런 관리하는 소프트웨어 다라고 이해해준 되겠구요 4 프로세스 저장장치 네트워킹 창자 하드웨어를 달리 에요 자 프로세스의 먼저 간단해 보면은 프로세스는 우리가 싫어하는 프로그램들을 프로세스 라구요 이건 이따가 또 설명을 할게요 그래서 프로그램 그리고 저장장치 뭐 저장 전부 국내에 운용 체제에서 저장 장치 라고 하면 주로 이제 메모리 즉 예레미 될 거에요 램 그래서 여기는 저장을 낮으면 내 미라 하드디스크 이렇게 두개를 의미한 없죠 그리고 네트워킹 그 사용자 사용자 라고 하면은 이제 하나의 울산 의 여러 명의 사용자를 줄 수 있잖아요 그래도 이 사용자가 아따 게이 보안 권한이 있구요 이런 것들을 관리 하게 되고요 그리고 하드웨어 하드웨어 까지 관리를 하게 되죠 그래서 이렇게 5개를 관리해서 만약에 면접관이 뭐 어우 뇽 찾아가 먼지 물어본다면 저는 내의 그대로 데려갈 것 같아요 시스템 말자 움과 동작을 관리하는 소프트웨어 인데요 프로세스의 저장장치 네트워킹 사용자 하드웨어 등을 관리하게 됩니다 이 절은 왠만 하죠 4 금 다음 볼게요 다음은 메모리 우주의 요 네 우리가 사용하는 메모리 측 램 이거든요 레미 어떻게 이루어져 있을까 어떻게 이루어져 이딴 보다 내가 프로그램을 실행했을 때 이 메모리를 어떻게 사용할까 에 대한 내용인데요 4 크게 코드 데이터 힙 스텍 으로 나누어 지게 되요 그럼 잠깐 한번 볼게요 메모리 구조를 보면요 어이 그림이 가장 잘 설명을 하고 있는 것 같아요 뭐 우리가 사용자가 이 프로그램을 실행을 하면 요 운용자 운영체제는 그 프로그램이 있는 그 하드디스크로 가요 그 하드디스크의 가서 그것을 이제 메모리에 불러 오거든요 뭐 이제 cpu 는 그 불러온 2 메모리의 불러온 것들을 실행을 하게 되요 그럼 각각의 어떤 역할을 하는지를 보면요 이제 크게 내 부분을 나누어 있다고 했죠 자 코드 영역은 이제 소스 코드가 들어가는 부분이에요 우리가 뭐 크롬을 보고 사용한다거나 유튜브 앱을 사용한다고 해도 코드이다 코드로 이루어져 있을 거 아니에요 그 코드 들의 2 메모리 영역에 들어가는 거예요 그 데이터는 이제 전역변수 라 정적 변수 가 들어가게 되구요 힘 영역은 사용자가 동적 으로 할당 하는 거에요 그러니까 내가 뭐 괴로움을 사용 하다가 뭐 예를 들면 은 어떤 버튼을 눌렀어요 그럼 버튼 정보가 어디에 저장이 되 겠죠 뭐 아니면 캡을 추가 했어 그럼 어떤 성우 탭을 추가했던 정보가 저장이 되겠죠 이런것들이 저장되는 공간이 tv 사용자가 이 사용하면서 내가 사용하면서 동적으로 할당하는 공간 이고요 이런 파일의 크기가 결정된다 는 것은 크게 컴파일이 랑 런타임이 있어요 컴파일은 내가 프로그램을 이제 배포할 때 그러니까 어 내가 자바 코드를 쓰고 그걸 컴파일 한다고 하죠 그때가 컴파일 인데 여기서 컴파일 타이밍이라고 하면은 그렇게 이미 이제 그 메모리가 얼마나 4g 할지가 결정되어 있다는 거에요 근데 힙은 아까 뭐였죠 힙은 사용자가 동적으로 할당 내가 사용하면서 결정이 된다고 했거든요 그래서 런타임을 이 사용중에 넣은 사용하는 중에 이제 크게 결정되는 걸 넌 타이밍이라고 이 컴파일러는 타임 앞으로도 계속 따온 개념이 라서 정리해봤어요 그래서 동적 r 따는 런타임에 크게 결정되고 요 그 지역에서 매개변수는 스택은 컴파일 때 그의 결정되어 그리고 이제 스팅 영역이 있는데요 스텟 영역은 스택이 잘 구조를 잠깐 보자면 은 스택은 이렇게 생긴 자를 부 줘요 그래서 이쪽으로 들어오고 이쪽으로 나와요 그래서 1232 들어가나 지면은 1벌 2번 3번이 들어가고요 나올때는 뭐부터 나올까요 1번 맨 밑에 있어 먼 나오거든요 3번 2번 1번 그래서 이렇게 들어온 것과 나가는 것에 순서가 바뀌는게 스텝 자료 구조의 특징이에요 자 근데 이게 왜 스택 영역 이라고 하냐면 요 스택 영역 은 함수 함수 정보를 저장해야 함수의 정보 그리고 하누소 안에서 사용하는걸 지역 변수 라고 하죠 이 지역 변소 매지 원수가 저장후 되거든요 그래서 스테 개의 내가 a 라는 함수를 해서 b 라는 함수 호출을 했어요 그 여기서 c 라는 함수 호출 했다고 치면 은 자 이게 스택에 소장돼 이렇게 a b c 이 함수는 스펙과 되게 잘 어울려요 왜냐면 은 자 씨 함수가 이제 호출이 끝났어요 여기서 실행이 다 끝났어요 그럼 어디로 하죠 뒤로 가죠 그다음 어디로 가죠 이루어져 그러니까 씨가 끝나면 비가 되고 삐 가 끝나면 a 로 가요 그래서 스펙과 되게 엉 무관 있어요 거리에서 스팅 그는 이제 여기 지역별 도매 기면서 함수 정보들을 저장하고 요 힙은 동적 사용자가 저장한 그 데이트 들이 사용자의 정보들이 동적으로 할당되는 공간이다 거의 가운데 화살표는 요 여기는 이제 빈공 아니에요 그래서 스택이 쓰면 더 많이 쓰면 이렇게 찰 수도 있고 힙 또 이렇게 찰 수가 있구요 그래서 여기를 서로 넘어가면 문제가 되겠죠 4 아무튼 그래서 이제 메모리에 구조를 이렇게 알아 봤구요 그렇죠 코드 데이터 키스 텍이 있다 그래서 이제 다시 면접으로 도 면접 질문으로 돌아온다면 아니게 먼저 자가 면접관이 메모리 구조에 대해서 설명해 보세요 라고 말하면 저는 메모리에는 크게 4가지 종류가 있습니다 코드 데이터 킵 스틱이 있고요 각각 호 대는 이제 소스 코드가 들어간 부분 오고 데이터는 전역변수 정책분석 안 땅 되는 부분이에요 그 힙은 사용자가 직접 관리한 농약으로 이제 베이터 가 동적 으로 할당되는 공간이 있구요 프리스케일 근 함수 욕 출 정모 지어 변수 매개변수 들이 저장되게 됩니다 라고 대답을 하겠어요 자 어떻게 여기까지 괜찮네요 자 그럼 다음 또 볼게요 다음은 이제 프로세스와 쓰레드 인데요 이제 프로세스를 간단하게 말하면 실행중인 프로그램이 되요 자 우리가 유튜브 즉 만약에 모바일 폰으로 유튜브를 쳤다고 볼게요 그러면 유튜브에서 이렇게 동영상 이렇게 나오게 되겠죠 이게 하나의 프로세스에 거죠 잠 3d 는 뭐냐 스레드는 프로세스의 안에서 실험 해 주는 반 이에요 자 예를 들면 은 자대 가 동영상을 이렇게 보고 있어요 그럼 여기서 지금 밑에 2빠 가는 거 보이시죠 빠가 이렇게 가고 있어요 그러니까 동영상이 실행되고 있잖아요 여기 원을 이 프로그램이 실행을 하고 있겠죠 그러면서 내가 동시에 이 좋아요 를 눌렀다 고 가정을 해 볼게요 자 이 지금 이동영 사람 좋아요 눌러 보세요 4 그러면 좋아요 울면 어떻게 되죠 이 좋아요 가 불러서 일이 되면서 자 이어 그 유튜브 서버에 데이터를 보내서 이 좋아요를 일을 시켜 줘라 라고 이런 요청을 보내 겠죠 자 그런데 이것도 하나님 실행되는 단위 잖아요 그러니까 여기서 실행되는 게 하나가 있고 여기서 실행되는 게 하나가 있어요 그러니까 제가 하고 싶은 말은 프로그래밍의 10억이 실행할 수 있는 바위가 있다는 거예요 하나는 실행되는 이 아니고 여러개가 실은 이 된다는 거예요 그래서 이 하나하나가 쓰 내더라구요 자 그럼 이제 이해 가시나요 프로세스 안에서 실용 단위가 스웨드 해요 그 2세대가 여러 개의 있는 것이 프로세스가 구요 자 그러면 조금만 더 자세히 볼게요 자 운영 체제에는 이제 역 여러개의 프로세스가 들어갈 수 있어요 우리가 여러 개의 프로그램을 킬때 그렇게 되겠죠 그래서 뭐 1조 를 키고 뭐 카카오톡을 키고 이런식으로 되면은 여러 개의 프로세스가 이렇게 들어가게 되겠죠 근데 프로세스의 중요한 것은 각각 이 독립한 메모리를 할당 받는 거에요 그래서 메모리가 이렇게 있을 때 이제 a 모 프로세스의 2 dc 뭐 이런식으로 각각의 독립된 영역을 가지 왜냐하면 은 단어의 언어 이걸 어떻게 보면 예를 들어서 6개 누가 여기 유튜브가 있는데 그렇게 카카오톡이 있다고 쳐요 근데 유튜브가 갑자기 가카오 통에 있는 정보를 가지고 와 가지고 온 자기 맘대로 쓰나 이렇게 한 많이 안 되잖아요 그럼 서론은 이렇게 독립되어 있어요 서론 다 박혀있어요 그래서 각각의 프로세스는 자기의 독립된 영역을 쓴다 또 이해해주시면 되겠구요 이게 왜 중요하냐 하면 이 이것때문에 중요 하나의 프로세스에 안에서 여러 개의 쓰레드가 있잖아요 아따 본 것처럼 유튜브 안에 열 개의 쓰레드가 지 실행될 수 있다는거 초 그래서 이렇게 여러 개의 실행될 수 있는데 이때 이 코드 데이터 힙은 공유와 되요 근데 스레드는 스테 끔 각각 공유 되지 않아요 자 이게 왜 그러냐면 요 자 유튜브 한번 더 가져올게요 자 실행될 죽는 스웨이드가 있고 좋아요 에 쓰레드가 있어요 좋아요 의 쓰레드가 있다 고쳐 볼게요 자 그러면 이 도 가 실행되는 것은 각자가 어떤 함수를 호출하는 거겠죠 어떤 메소드가 호출 되서 이렇게 실행이 되는 거겠죠 이것도 마찬가지로 이게 진행되면서 어떤 메소드가 호출되는 오겠죠 그런데 이 메소드의 호출 정보들은 가까 스택에서 장르 잖아요 그리고 이 서로 는 아무런 영화니 업적이 한소 줄 정보는 예를 들면 여기서 실행을 한계 여기에서 어떤 뭐 쓸 게 없잖아요 쓸 이유가 없잖아요 2 여기서도 마찬가지고요 근데 여기서 전역변수 는 데이터 에 전혀 안 된다 있죠 전역변수 라마는 제목 각 모두 사용할 수 있는 그런 변수들을 말이에요 그래서 그런 것들을 이제 풍토를 사용될 수 있게 하는 거죠 그래서 다시 한번 강조 하자면 정리하자면 프로세스는 여러 개의 스레드를 갖고 있는데 이 흡수를 뜯기는 데이터를 공유할 수 있어요 근데 스펙 이란 영역은 공유하지 않고 동적 으로 사용한다 이렇게 정리를 할게요 자 그럼 다시 면접으로 돌아오면 집중은 돌아와서 아닌게 면접관이 프로세스와 쓰레드의 설명을 해주세요 라고 말하며 는 저는 이렇게 대답을 하겠어요 4 프로세스는 실행중인 프로그램 이구요 스레드는 프로세스의 안에서 실행되는 흐름 당이 입니다 프로세스는 메모리를 메모리와 cpu 를 이제 프로세스의 마다 할당 받아서 사용하는데 이제 스레드는 프로세스의 안에서 다른 스레드와 메모리와 cpu 를 공유해서 사용 없다 라고 대답을 하겠습니다 근데 그러면 다음 cpu 스케줄러 볼게요 cpu 스케쥴 너는 어떤 개념 뭐냐면요 자 우리가 어 유튜브를 보면서 카카오 라고 있다고 줄게요 그러면 이게 동시 싫은데 초 동시에 실행을 105 있다고 생각을 하잖아요 그런데 cpu 는 한 번에 하나만 실행을 할 수가 있어요 그래서 이걸 이거를 7 행하면서 동시에 사실 실행하고 있는 게 아니 사실 어떻게 실행을 하고 있냐면 여기 잠깐 실행했다 가 이렇게 잠깐 실행이다 예를 들면 따른 따른 뭐 예를 들어서 라인 실행을 하고 따져보기 요 라인 실행이 이게 계속 사케 자기 자캐 짧게 짧게 짧게 이런식으로 왔다갔다 하는 거에요 그래서 우리가 느끼기에는 게 동시에 실행할 수 있는 것처럼 보이고요 이렇게 이 투 실행하고 있는 프로세스가 이제 준비 추후 라는 곳에 안에 들어가 있어요 2+ 에 이 cpu 를 할당하는 방법을 쉽지요 스케줄러가 이제 어처구니 를 하고요 그러면 cpu 스케줄러 와 어떤것들이 있는지 한번 볼게요 치키 스케쥴러를 보기 전에 개념 하나만 차고 갈게요 자 선점과 비선 점이 있어요 여기서 선점을 남의 걸 빼 안 한다는 의미 구요 비전 점은 빼앗지 않는다 는 얘기에요 자 여기서 온 어떻게 쓰이고 있을 거 냐 면 자 앞에 이미 cpu 가 어떤 cpu 가 어플 s1 이라는걸 처리하고 있다고 쳐요 그럼 다음에 이제 프로세스의 티가 실행을 해야 될 때 이 프로세스의 스월 니 끝날 때까지 기다리는 것은 빼는게 아니죠 그래서 b 선적 이고요 너 나와 하고 바로 프로세스의 투가 이제 실행되는 걸 선점 이라구요 그러면 이제 b 선점 먼저 볼게요 이 선점을 우선 첫번째는 fc 옆에 있을까 있어요 펄스 컨트롤 4부 듣자구요 먼저 오는 순서대로 처리 하는 방식이에요 그래서 첫번째 1 이사회의 오면은 이걸 다 끝나고 이건 처리되고 이거 저렇게 쉽죠 of ce fc fa 쓰구요 다음을 보면 은 밤스 다음은 sj f sg 예쁜 의 쇼 레스트 자 1st 그러니까 cpu 를 위해서 사용하는 시간이 짧고 오는게 제일 먼저 실행한 날 왜냐하면 짧은거 를 먼저 실행 하면 더 처리할 수 있는 야마나시 니까요 1초를 1 짧은 시간을 빨리 실행해야 여러개를 저희 할 수 있잖아요 4 이게 sj 이 거에요 자 그러면 만약에 프로세스와 이렇게 있는 예제가 있다 고 차 볼게요 우리 여기서 버스트 타임이 뭐냐면은 cpu 에서 사용하는 시간이에요 자 그럼 어떻게 되냐면 프로세스의 투가 1 지금 적 쩝 cpu 사용시간 2 그래서 이게 첫번째로 사용 될 거고요 다음으로는 유기 짝 쩍 이게 두 번째로 사용되고 이게 세번째 이제 네 번째로 사용 되겠네요 자 그러면 비추 원 뽀 쓰리 143 눈 후로 이렇게 스케줄링 이 되겠죠 4 그래서 이렇게 saf 가 이루어지게 되구요 다음은 이제 선 점이에요 아까도 지금 방법 보고 fc fs sf 핀다 람에 금배지 않았죠 다 끝날 때까지 기다렸다 말이요 근데 섬 점은 이제 빼는 스케줄링 이에요 이미 처리하고 있는 것을 나와 하고서 이제 들어가는 거에요 아 단 첫번째는 site srt 는 c5 리스트 림 e 닝 타 임 자 아까 sj 티가 보였죠 쇼 리스트 자 saf 였죠 sgf 쇼 리스트 자 1st 줘 그러니까 전체 처리 시간이 짧은게 첫번째 거든요 짧음을 우선으로 한다 근데 srt 는 남은 시간이 짧은 걸 우선으로 하는 거예요 하니까 지금 내가 딱 봤을때 얘는 먼저 실행을 됐는데 나보다 신화 해야된 시간이 많아 그런 얘 얘가 학원 걸 뺏고 대 가 들어간 자 예를 보면 은 자 프로세스와 원이 0 초에 시작이 됐어요 그래서 8초 동안 에 이제 처리를 해줘야 된단 말이죠 그러면 그래서 이제 처리를 했어요 cpu 와 이제 이제 프로 세트 원을 받고 이제 처리를 의지하고 있어요 근데 프로세스가 1 초 1때 왔어요 그럼 지금 q 프로세스와 는 1초가 실험 되서 7초간 않았겠죠 근데 프로세스는 4초에 남은 시간을 갖고 있어요 그럼 도 나와 아무 서 플러스원 이 아니고 프로세스의 투가 변개 srt 에요 4 이해 하시죠 4 그 다음에 파운드로 비는 이제 여러 개의 프로세스를 처리할 때 그 동안에는 요거 실행하고 요거 싫어 이런 식으로 치료 느꼈다면 라운드 올리는 어여 기의 조역 1초 여기에 초역 1주기 이렇게 공평하게 시험 되는게 라운드 로빈 이에요 뭐 이 일초는 정해진건 아니고 내가 조절할 수가 있겠죠 자 그래서 라운드 위는 이제 문제가 2타임 헌터 밀항 걸 알았어요 여긴 타임 슬라이스를 안하는데 못할 퀀텀 이로써 되어 암 테 퀀텀 이음 무슨 개념이라면 프로세스와 원투쓰리 이렇게 실행을 한다고 쳐요 원 2 쓰리 이제 cpu 가 여우 나은 로비는 뭐 몇 초 몇 초면 초 이런식으로 이제 실행이 되겠죠 근데 여기서 이거를 말이야 벡터 라고 할까요 엔초 라고 아주 길어졌어요 그러면은 일본이 2배 초 안에 끝날 수 있겠죠 끝나고 이번도 끝났고 3번도 끝나버릴 게 되면은 이거는 fc 에페스 들어온 순서대로 쳐다 처리하고 다음 거 처리하는 것과 다름 게 없어요 근데 만약에 옆에 초 아니고 0.2 초 로 매우 짧으며 는 어떻게 될까요 여기 잠깐 썼다가 의 상가 섰다가 여기 잡았었다 그럼 좋은거 조 좋은 거에요 왜냐면 은 라운드 5 빈 의도가 이 모든걸 호평 하게 실행 하자는데 라운드 로빈 의도 거든요 그러니까 이거 이거 의도와 맞죠 역 짧으면 잡을수 근데 이 문제는 김제 는 뭐가 있냐면 내가 1번을 실행을 하고 있잖아요 그러다가 이번 을 실행하여 가려고 할 때 이 비용이 발생해 요 여기서도 뭐 0.2 초 정도 시간이 걸려야 뭐 여기에 또 이번에 3번 할 때도 여기 0.1 초 만큼 시간이 걸려요 이렇게 비용이 발생하기 때문에 너무 짧게 되면 오히려 그 비율 더 클 수가 있어요 이 옮기는 비용 뭐 더불어 온거죠 날개가 지금 프로세서를 처리한 데 시간을 쓰는게 아니라 왔다갔다 하는데 시간을 쓰는게 그래서 이 탄 퀀텀 이 너무 작다면 오히려 비율 저기에 그래서 이탈 퀀텀 을 적당하게 설정 하는 게 중요하다 라는 것만 알아두세요 마지막으로 우선순위 스케줄링 인데요 우선순위 4대 우선순위가 높은 프로세스의 먼저 할당을 한다 온 우선순위는 뭐 알아서 정확하게 쬲 우리가 보는 생각할 건 아니구요 아무튼 우 우 선수 우선순위 스케쥴링 은 우선순위에 따라 스케쥴링을 하는 거다 라고 이해해 주시면 되요 자 그러면 정리 한 번 할게요 먼저 빤히 cpu 스케줄러가 뭐예요 라고 물어보면 전 이렇게 다 뵐께요 4 준비 큐에 있는 프로세스에 대해서 cpu 를 할당하는 보입니다 크게 5가지 가면 되어 fc 에 패스 sf srt 푸르 플레이어에게 스케줄링 그리고 라운드로 밴이 있습니다 이렇게 내가 마련이에요 그러면 물어 보겠죠 fcf sml see 이런 것들이 뭔지 그럼 그 건은 이제 다 준비를 하셔서 대답을 하시면 되겠어요 자 다음으로는 이제 가상메모리 인데요 가상 메모리는 간단하게 설명을 드리면 은 자 우리가 프로그램을 실행을 해요 그러면은 cpu 에서 해당 프로그램을 실행을 하려고 할 때 이 프로그램 어디에 있죠 하드디스크의 있어요 여기서 이제 뭘 멜로를 할 거에요 를 놀이 여기 이렇게 잘 보관되어 있어요 끔 2cpu 에서 로 를 실행하려면 파로 못하고요 여기 메모리에서 에요 메모리의 가지고 와야 이걸 롤 역의 가지고 와야 cpu 늘 실행을 할 수가 있어요 이 구조로 컴퓨터가 이루어져 있다 말이에요 근데 내가 룰 높이고 뭐 와우도 키고 아웃 5 키고 여러 게임을 덩 파도 키고 여러 게임을 동시에 올렸다고 쳐 볼게 근데 이게 호통 1 2기 3기가 될 거 아니에요 최소한 근데 내가 램을 4기가 스 짜리를 써요 그럼 어떻게 될까요 내 미 터 질까요 아니에요 그래도 실행이 되요 왜 실행이 되냐면 이거를 다 울리는 게 아니에요 이 3기가 를 다 웃는게 아니고 사용하는 부분만 메모리에 올리고 나머지는 디스크에 보관하기 때문에 터지지 않고 다 실행을 할 수가 있어요 그래서 다시 정리하면 은 가상 메모리는 이제 디스크 이를 효율적으로 사용하기 위해서 사용하는 것만 메모리에 올리고 나머지는 디스크에 보관하는 거에요 자 그러면 가상 문의 조금만 더 볼게요 4 이게 가상메모리를 이제 잘 필요한 그림인데요 조금 보기 5 복잡할 수도 있어요 근데 제가 자세히 않아 하나씩 설명 드릴께요 자 cpu 가 이렇게 있구요 연기 메모리가 있어요 우리는 지금 프로그램 원과 투 프로세스를 볼게요 프로스 원과 툴을 실행을 하려고 해요 근데 내가 지금 a b c 만 사용을 해요 그러면 메모리에 a b c 만 올리는 거예요 근데 지금 이 순서가 일치 하지 않죠 그러니까 사용하는 부부만 울리면 좋아요 자 우리가 디스크의 디스크 에 사용하는 분만 이렇게 사용한 부분이 이렇게 연속해 있으면 좋겠 거 든요 근데 사실 그렇게 낼 수 없잖아요 바 그림은 여 모 그림은 여기에 있고 뭐 글자는 여기에 있고 이런 식으로 될 수 있는 경우가 많잖아요 그렇기 때문에 이것들이 이렇게 떨어질 수 밖에 없어요 그 게다가 여기에 메모리에 올릴 때 이 메모리 향상 포터 비어 있는게 아니잖아요 여기는 모 씨 라는 프로세스가 쓰고 있을 수도 있잖아요 그리고 이런 것들이 반복되면 은 이 여기 중간이 비어 있을 수도 있구요 이렇기 때문에 매물이 상황이 1 이렇게 가지런하게 있지가 않아요 그렇기 때문에 a b c 각 순서가 뒤죽박죽 이거든요 음 cpu 가 이 메모리에 접근해서 a 라는 걸 가져오려면 예의가 어디 있는지를 알아야 되잖아요 그래서 사용하는게 이 페이지 테이블이 지금 보면은 2페이지 넘버 라고 되어 있는 것은 2기 디스크에 있는 이번 후에요 그래서 0 본 0 보는 에 잊어 영보 4인을 3회 있다 그러면 여기에 있는거죠 3일 일본 피는 이래 있다 여기에 있어 이런식으로 페이지 테이블 사용해서 어메 몰카 메인 메모리에 접근하는 거죠 가상 메모리를 사용해서 그래서 다시 정리하면 은 가상 메모리는 사용하는 부분만 이렇게 올리는 것을 가상 메모리 라고 해요 자 그러면 다시 면접 질문으로 돌아와서 만약에 면접관이 가상 메모리 1 가버너 물어본다면 저는 모든 프로세스에 게 메모리를 할당한 얘는 메모리의 크기가 1 기회가 있어서 사용하는 방법입니다 어플로 쎄쎄쎄 서 사용하는 부분만 메모리 올리고 나머지는 디스크에 보관 기법을 가장 메모리 라고 합니다 라고 대답을 하겠어요 4 밤은 이제 배 드 라 볼게요 베드 락은 이제 프로세스가 자원을 얻지 못해 다음 자월 어느 못하는 상태라고 보면 되요 자 이게 무슨말이냐면 을 자 a 라는게 있다고 좋게 a 는 d 가 있어야 하체가 될 수 있어요 이거 근데 삐는 씨가 있어 약체 를 할 수가 있어요 근데 c 는 a 가 있어서 있어야 합체를 할 수가 있어요 자 이렇게 되면 합체가 되나요 아무도 업체가 되지 못하죠 이제 a b c 가 같았 자원 이고요 이거를 프로세스의 스월 니 가지고 있고 프로세스가 가지고 있고 프로세스로 리가 가지고 있다 볼게요 그러면 이제 크로스 원은 삐 를 가지고 있어야 실행을 할수 가 실행이 되요 다음으로 넘어가요 투 도 마찬가지고 쓰리고 마찬가지 금이 원투쓰리 둘 다 아무 것도 못하고 셋 다 아무것도 못하고 그 자리에 그냥 막혀 있는 상태죠 이 상태를 데드락 이라고 표현해요 그럼 2대 벼락을 조금만 더 볼게요 4 데드락 을 가장 잘 표현해 주는 그림 2와 돼서 가져가세요 이렇게 깍깍 막혀 가지고 아무것도 못하는 상태를 대비하기 라구요 예 근데 데드락 에서 중요한 거는 면접관들이 꼭 물어 본 건은 이 데드락 발생 조건이 며 뱁 일하기 언제 말 생 아냐 근데 2대 드라 발생을 이 네가지 조건이 있어요 이렇게 이것이 동시에 성녀 캐야 되요 하나라도 빠지면 성립이 안 되요 그래서 이 4개를 외워 주셔야 되요 자 첫 반정도 케어 상호 배제 는 상업의 제는 한 번에 하나만 살 가지고 있을 수 있다는 거예요 자 아까 a 라는 프로스 아이라는 자원을 프로세스의 뭐니 가지고 있었죠 근데 만약에 프로세스를 이가 이 애 1 동시에 가질 수 있다면 은 이것은 입에 dr 양 올리게 쫌 왜냐면 이 거다 동시에 가지면 되니까 그래서 이런 경우가 아니고 한번에 한 프로세스의 맛 사용할 수 있다는 게 상호 배제 요 다음은 점유율의 의미 에 이어 점을 되기는 어 하나의 자원을 점유하고 있으면서 다른 프로세스에 할당된 자원을 대기하고 있어야 되요 그러니까 즉 말 그대로 프로세스 원이 a 를 가지고 있으면서 있으면서 비를 대기하고 있어야 되요 점유 102 4 다음엔 비선 점이에요 아까 3점이 던전 간단하게 맞잖아요 기선 점은 빼앗아 올 수 없다는 거죠 선정은 빼앗 하는거고 그래서 플러스 에스원이 비를 뛰는 이제 프로세스가 가지고 있는데 이거를 빼앗아 올 수 없다 이 액 이구요 마지막으로 순환 되기는 이것들이 순환 해서 순환 해서 이루어져야 된다 이 말이 쓰면 되겠지요 그래서 정리하자면 데드락 발생 조건은 4가지가 만족해야 되어 상호 배제 전 맥이 위선적 시먼딩 이렇게 4가지 다시 그래서 면접으로 돌아가면 요 만약에 면접관이 데드락 이 뭐냐고 물어보면 요 저는 이렇게 잘 볼게요 4 데드 람은 프로세스가 자원을 얻지 못해 다음 작업을 못하는 상태입니다 예를 들어 보면은 프로세스의 모험과 추가 같았 자원 a 와 b 를 얻어야 되는데 프로세스와 어는 al 프로세스는 뛸 가지고 있어서 서로 무한정 기다리고 있는 상태를 데드락 이라고 합니다 어 데드락 을 내가 지도 껀 조건 다음에 내자 가지 조건이 동시에 발생이 아 성님이 가능한데요 어 그래 가지는 사업의 제 적용되기 b 선저 순환 얘기입니다 이렇게 해주시면 되겠습니다 네 그래서 오늘 이렇게 6가지 개념 알아 봤구요 다시 한번 강조 하냐면 절대 이게 끝이 아니에요 제 밑에 그 질문 그 링크 보면 을 엄청 많아요 그리고 9t 거리에서도 검색하고 엄청 말이야 그런데도 많다고 포기하지 마시고 하나 하나씩 차근차근 이 하시면 되겠어요 좋겠습니다 저도 이 처음에 면접 준비 할 때가 기억나요 아 이렇게 많은 걸 언제 하지 아 그냥 하지말까 이생 아닙 듣기 했었거든요 근데 여러분이 분께 준비하면서 힘드셨죠 나요 그래서 이 2호 만큼만 조금만 더 가면 돼요 변 적중 미는 만하면 은 이제 이쪽 과정이 끝난 그래서 조금만 더 힘내 해주시고요 오늘 동상은 이렇게 바칠 게요 안녕