Tech Interview - OS


Tech Interview 준비 - OS

📌 동기 VS 비동기

  • 동기 : synchronous
    A노드와 B노드 사이의 작업 처리 단위(transaction)을 동시에 맞추는 것
    설계가 간단하고 직관적이지만 결과가 주어질 때까지 아무것도 못하고 대기해야한다.
  • 비동기 : Asynchronous
    노드 사이의 작업 처리 단위를 동시에 맞추지 않는 것
    설계가 복잡하지만 결과가 주어지는데 시간이 걸리더라도 그 시간동안 다른 작업을 할 수 있으므로 자원을 효율적으로 사용할 수 있다.


📌 Paging VS Segmentation

  • Paging
    페이지가 연속적인 물리 메모리 공간에 들어가야하는 제약을 해결하기 위한 방법이다.
    가상 메모리는 페이지, 물리 메모리는 프레임이라는 고정 크기의 블록으로 나눈 후, 페이지 테이블의 매핑을 통해 1:1 대응 시킨다.
    외부 단편화를 해결할 수 있다.
    페이지 단위를 작게 하면 내부 단편화(Internal fragmentation) 역시 해결할 수 있지만 페이지에 공간을 할당한 후, 남는 공간이 적어지기 때문에 그 만큼 page mapping 과정이 증가할 수 있다.
  • Segmentation
    method, function, object, variables 등 프로그램의 논리적 단위를 바탕으로 서로 다른 크기의 블록으로 나누는 방법이다.
    세그먼트들의 크기가 서로 다르기 때문에 메모리를 페이징 기법처럼 미리 분할해 둘 수 없고, 메모리에 적재될 때 빈 공간을 찾아 할당하는 사용자 관점의 가상 메모리 관리 기법이다.
    각 세그먼트 별로 길이 값을 가지고 있어 내부 단편화를 해결할 수 있다.


📌 교착상태 : DeadLock

  • 한정된 자원을 여러 곳에서 사용하려고 할 때, 발생하는 문제이다.
  • 즉, 프로세스가 자원을 얻지 못해서 다음 처리를 하지 못하는 상태이다.

➀ 상호 배제(Mutual Exclusion)
➜ 자원은 한 번에 한 프로세스만이 사용할 수 있다.
➁ 점유 대기(Hold and Wait)
➜ 프로세스가 이미 자원을 점유하는 상태에서 다른 자원을 무한정 기다린다.
➂ 비선점 (No Preemption)
➜ 다른 프로세스에 할당된 자원은 사용이 끝나서 반납할 때까지 강제로 빼앗을 수 없다.
➃ 순환 대기 (Circular Wait)
➜ 각 프로세스들이 원형으로 구성되어 순환적으로 자원을 요구한다.


📌 프로세스 VS 스레드

  • 프로세스
    운영체제로부터 프로세서, 주소 공간, 메모리과 같은 시스템 자원을 할당받는 작업의 단위로 실행된 프로그램을 의미한다.
    프로세스는 실행될 때 운영 체제로부터 독립된 메모리 영역 (Code, Data, Stack, Heap)을 할당받으며 다른 프로세스의 자원에는 접근할 수 없다.
  • 스레드
    프로세스 내에서 동작되는 실행의 단위이다.
    프로세스 내의 주소 공간이나 자원을 공유할 수 있다.
    프로세스 내의 Code, Data, Heap 영역은 다른 스레드와 공유하고 Stack 영역을 따로 할당받는다.
    ➜ Stack은 함수 호출 시 전달되는 인자, 되돌아갈 주소값 및 함수 내에서 선언하는 변수 등을 저장하기 위해 사용되는 메모리 공간이므로 독립적인 함수 호출을 가능하게 하기 위해서 독립된 Stack을 할당 한다.


📌 프로세스 생성 과정

  1. PCD가 생성되며 OS가 실행한 프로그램의 코드를 읽어들여 프로세스에 할당된 메모리의 Text segment에 저장한다.
  2. 초기화된 전역변수 및 static 변수를 data segment에 할당한다.
  3. HEAP과 STACK은 초기 메모리 주소만 초기화된다.
  4. PCD에 여러 정보가 기록되면 Ready Queue에서 CPU를 할당받기까지 대기한다.
    • PCB란 : 프로세스에 대한 중요한 정보를 저장하고 있는 운영체제의 자료구조. 운영체제는 프로세스를 관리하기 위해 프로세스의 생성과 동시에 고유한 PCB를 생성한다.
      프로세스는 CPU를 할당받아 작업을 처리하다가도 프로세스의 전환이 발생하면 진행하던 작업을 저장하고 CPU를 반환해야 하는데, 이때 작업의 진행 상황을 PCB에 저장하게 된다.
      그리고 다시 CPU를 할당받게 되면 PCB에 저장했던 내용을 불러와서 이전에 종료했던 시점부터 다시 작업을 수행한다.


📌 Heap VS Stack

➜ Heap은 메모리 주소가 낮은 영역부터 채워지고, Stack은 메모리 주소가 높은 영역부터 채워진다.
동적 할당을 할 경우 -> Heap 영역에 할당됨
함수 내부의 지역변수를 저장하거나 함수를 호출한 caller의 환경 정보 저장 -> Stack에 저장


📌


📌






© 2021.01. by gayeon

Powered by gayeon