개인 공부/TIL

[ TIL - CS ] 면접을 위한 CS 공부 1편 - 운영체제 -

킴도비 2024. 10. 28. 09:29

🖋 오랜만에 돌아온 TIL이다! 최종 합격을 위한 공부를 시작해 보자 🔥

 

🚌 2024년 10월 28일~ 2024년 11월 2일까지의 주제는 운영체제다.

 

💡 공통으로 준비한 질문

1️⃣ 첫번째 접은 글은 내 말로 풀어쓴 정답
2️⃣ 두번째 접은 글은 해석 또는 공부한 내용 또는 추가적으로 궁금한 내용

 

1. OS(운영체제)가 무엇인지 설명해 주실 수 있나요?

더보기

운영체제란 하드웨어를 사용하기 쉽게 만들어주는 인터페이스입니다. 사용자가 효율적으로 쓸 수 있게 관리해줍니다.

더보기

1. 운영체제 목적

 

운영체제를 사용하는 가장 주된 목적은 컴퓨터의 하드웨어를 관리하는 것이다. 컴퓨터에는 수많은 하드웨어가 존재한다. CPU, 메모리, 디스크, 키보드, 마우스, 모니터, 네트워크 등이 있으며 이를 잘 관리해 주어야 컴퓨터를 효율적으로 사용할 수 있다. 운영체제의 성능이 좋을수록 컴퓨터의 성능 역시 좋아진다고 할 수 있다.

 

운영체제는 사용자에게 편의를 제공하는 목적도 가지고 있다. 운영체제가 없다면 위에서 말한 하드웨어에 관한 모든 관리를 사용자가 해야 한다는 점과 같이 컴퓨터를 사용하는데 매우 불편함을 겪을 것이다. 하지만 현재 많은 발전을 거쳐온 운영체제가 설치된 컴퓨터는 사용하기에 매우 편리하다는 것을 느낄 수 있다. 대표적으로 스마트폰이 있다. 스마트폰 역시 컴퓨터의 일종이고 운영체제가 설치되어 있다. 그리고 스마트폰은 남녀노소 누구나 할 것 없이 사용법을 빠르게 익힐 수 있다.

 

정리하면 운영체제는 컴퓨터의 성능을 높이고(performance), 사용자에게 편의성 제공(Convenience)을 목적으로 하는 컴퓨터 하드웨어 관리하는 프로그램이다.

 

2. 프로세스와 스레드에 대해 설명하고, 둘의 차이에 대해 설명해 주세요.

더보기
  • 프로세스 : 운영체제로부터 자원을 할당받은 작업의 단위
    • 운영 체제에서 각 개별로 Code, Data, Stack, Heap의 형식으로 할당 받는다.
  • 쓰레드 : 프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위
    • Stack은 개별로 할당 받고, Code, Data, Heap은 자원을 공유한다.
  • 프로세스와 스레드의 확연한 차이가 있는 것에 대한 설명이 자세한 그림
스레드를 지렁이 같이 표현한 이유는 번역하면 실타래이며, 실행 흐름을 표현하기 위해서이다

 

  • 이 둘의 차이점을 물어보는 이유는 멀티프로세스와 멀티스레드를 사용할 때의 장단점과 그 흐름에 대해 알고 있어야 함이 크다. 즉, 둘의 기본 개념을 알고 있냐로 먼저 시작하는 것

  • 멀티 프로세스란?
    • 의미 : 하나의 프로그램여러 개의 프로세스로 구성하여 각 프로세스가 병렬적으로 작업을 수행한다. 
    • 장점 : 안전성(메모리 침범 문제를 OS 차원에서 해결한다)
    • 단점 : 각각 독립된 메모리 영역을 갖고 있어 작업량이 많을수록 오버헤드가 발생한다. Context Switching으로 인한 성능 저하가 발생한다.
      • Context Switching이란? 프로세스의 상태 정보를 저장하고 복원하는 일련의 과정이다. 프로세스는 각 독립된 메모리 영역을 할당받아 사용되므로, 캐시 메모리 초기화와 같은 무거운 작업이 진행되었을 때 오버헤드가 발생할 문제가 존재한다.
  • 멀티 스레드란?
    • 의미 : 하나의 응용 프로그램에서 여러 스레드를 구성해 각 스레드가 하나의 작업을 처리하는 것
    • 장점 : 독립적인 프로세스에 비해 공유 메모리만큼 시간, 자원 손실이 감소. 전역 변수와 정적 변수에 대한 자료 공유가 가능하다.
    • 단점 : 안정성 문제, 하나의 스레드가 데이터 공간을 망가트리면, 모든 스레드가 작동 불능 상태가 된다(공유 메모리를 갖기 때문에)
      • 그렇기에 Critical Section 기법을 사용하여 안정성에 대한 단점을 대비할 수 있다. 하나의 스레드가 공유 데이터 값을 변경하는 시점에서 다른 스레드가 그 값을 읽으려할 때 발생하는 문제를 해결하기 위한 동기회 과정을 거치기 때문이다.
      • 단, 상호 배제, 진행, 한정된 대기를 충족해야 한다.

 

멀티 프로세스와 멀티 스레드의 차이

 

  • 무엇을 많이 사용하는가?에 대한 건 추후에 더 찾아보는게 좋겠다.
더보기

1. 전체 내용에 대한 이해를 하기 위한 블로그

 

👩‍💻 ‍완전히 정복하는 프로세스 vs 스레드 개념

한눈에 이해하는 프로세스 & 스레드 개념 전공 지식 없이 컴퓨터의 프로그램을 이용하는데는 문제 없어 왔지만 소프트웨어를 개발하는 사람으로서 컴퓨터 실행 내부 요소를 따져보게 될때, 아

inpa.tistory.com

 

2. 둘의 차이를 간단하게 설명 가능한 참고 글

 

프로세스 & 스레드 | 👨🏻‍💻 Tech Interview

프로세스 & 스레드 프로세스 : 프로그램을 메모리 상에서 실행중인 작업 스레드 : 프로세스 안에서 실행되는 여러 흐름 단위 기본적으로 프로세스마다 최소 1개의 스레드 소유 (메인 스레드 포함

gyoogle.dev

 

3. 멀티 프로세스와 멀티 스레드에 대한 차이점에 대한 글

 

프로세스와 스레드의 차이

프로세스와 스레드의 차이는 프로세스와 스레드, 그리고 프로그램이 작동하는 방식에 대해서 잘 이해하고 있는지 확인하기 위해 기술면접에서 단골 질문 사항으로 나온다.

velog.io

 

4. 멀티 프로세스와 멀티 스레드에 대한 참고 자료 한눈에 보기 글

 

[CS 지식8.] 프로세스(Process)와 스레드(Thread)란?

Overview 프로세스와 스레드에 대해서 공부해보려고 한다.  "프로세스와 스레드의 차이점" 기술면접에서 가장 많이 묻는 질문 중 하나이다.프로세스와 스레드는 모두 서로 관련되어 있고 매우 유

somaz.tistory.com

 

 

3. 메모리의 힙 영역과 스택 영역의 차이에 대해 설명해 주세요.

더보기
  1. 실행 중에 메모리를 할당하는 영역(할당과 반납이 이루어짐)
    • HEAP 영역
      • malloc(), calloc() 등으로 프로그래머가 자율적으로 메모리 크기를 할당할 수 있는 영역이다.
      • 위의 함수들은 free()함수로 할당된 영역을 반납해줘야하므로 동적할당 영역에 속한다.
      • 런타임 시 크기가 결정된다.
      • 크기가 제한되어 있지 않다.
      • 주소 할당은 낮은 주소에서 높은 주소로 채워진다.
      • 스택에 비해 느리고, 직접 영역 관리가 필요하다.
         
    • STACK 영역
      • 지역변수가 할당되는 영역으로 함수가 호출되면 할당되었다. 함수의 종료시 반납되는 영역이다.
      • 컴파일 시 크기가 결정된다.
      • 주소 할당은 높은 주소에서 낮은 주소로 할당된다.
      • 힙에 비해 빠르고, 종료에 따라 소멸되므로 별다른 관리가 필요 없다.
  • 메모리의 위쪽에 위치할수록 낮은 주소이다. 

 

더보기

 

4. DeadLock(교착상태)에 대해 설명하고, 해결 방법에 대해 설명해 주세요.

더보기
  • 데드락이란? 
    • 두 개 이상의 프로세스나 스레드가 서로 자원을 얻지 못해서 다음 처리를 하지 못하는 상태시스템적으로 한정된 자원을 여러 곳에서 사용하려고 할 때 발생한다.
    • 무한히 다음 자원을 기다리게 되는 상태를 말한다.
  • 데드락이 일어나는 경우
    •  

 

  • 데드락의 발생 조건(하나라도 성립하지 않으면 데드락 문제는 해결 가능하다)
    • 상호 배제(Mutual exclusion) : 자원은 한번에 한 프로세스만 사용할 수 있다.
    • 점유 대기(Hold and wait) : 최소한 하나의 자원을 점유하고 있으면서 다른 프로세스에 할당되어 사용하고 있는 자원을 추가로 점유하기 위해 대기하는 프로세스가 존재해야 한다.
    • 비선점(No preemption) : 다른 프로세스에 할당된 자원은 사용이 끝날 때까지 강제로 빼앗을 수 없다.
    • 순환 대기(Circular wait) : 프로세스의 집합에서 순환 형태로 자원을 대기하고 있어야 한다.

 

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

 

  • 교착 상태를 탐지 & 회복교착 상태가 되도록 허용한 다음 회복시키는 방법
    • 탐지(Detection)
      • 자원 할당 그래프를 통해 교착 상태를 탐지함
      • 자원 요청 시, 탐지 알고리즘을 실행시켜 그에 대한 오버헤드 발생함
    • 회복(Recovery)
      • 교착 상태 일으킨 프로세스를 종료하거나, 할당된 자원을 해제시켜 회복시키는 방법
        • 프로세스 종료 방법 
          • 교착 상태의 프로세스를 모두 중지
          • 교착 상태가 제거될 때까지 하나씩 프로세스 중지프로세스 종료 방법
        • 자원 선점 방법
          • 교착 상태의 프로세스가 점유하고 있는 자원을 선점해 다른 프로세스에게 할당 (해당 프로세스 일시정지 시킴)
          • 우선 순위가 낮은 프로세스나 수행 횟수 적은 프로세스 위주로 프로세스 자원 선점

 

 

5. 동시성과 병렬성이 어떻게 다른지 설명해 주세요.

더보기
  • 동시성이란?
    • 멀티 프로그래밍 (Multi-Programming)에서 나온 개념
    • 주기억장치에 여러 프로세스를 적재해서 Context Switching을 통해 동시에 실행되는 것 처럼 보이게 하는 것을 의미
    • 실제로는 동시에 실행되는 것이 아니라, 번갈아 실행하는 것입니다. 싱글 코어에서 멀티스레드를 동작시키기 위한 방식입니다.


  •  병렬성이란?
    • 멀티 프로세싱 (Multi-Processing)에서 나온 개념
    • 실제로 동시에 여러 프로세스를 병렬적으로 실행하는 방식
    • 병렬적으로 실행하기 위해서는 CPU가 멀티코어여야 합니다. 

 

 

더보기

 

❔ 개인으로 준비한 질문

1. 세마포어와 뮤텍스의 차이는?

더보기
  • 세마포어란?
    • 멀티프로그래밍 환경에서 공유 자원에 대한 접근을 제한하는 방법
    • 1개만 접근 가능하므로 반드시 락을 획득한 프로세스가 락을 해제해야 한다.
  • 뮤텍스란?
    • 임계 구역을 가진 스레드들의 실행시간이 서로 겹치지 않고 각각 단독으로 실행되게 하는 기술
    • 현재 수행중인 프로세스가 아닌 다른 프로세스가 세마포어를 해제할 수 있다.
    • 이진 세마포어는 뮤텍스와 동일하다고 볼 수 있다. 이진 세마포어가 아닌 나머지 세마포어를 카운팅 세마포어라고 부른다.
  • 세마포어와 뮤텍스의 차이점
    • 세마포어는 공유 자원에 세마포어의 변수만큼 프로세스(or 쓰레드)가 접근할 수 있다
    • 반면에 뮤텍스는 오직 1개만의 프로세스(or 쓰레드)만 접근 가능
더보기

1. 세마포어와 뮤텍스의 코드

 

세마포어(Semaphore) & 뮤텍스(Mutex) | 👨🏻‍💻 Tech Interview

세마포어(Semaphore) & 뮤텍스(Mutex) 공유된 자원에 여러 프로세스가 동시에 접근하면서 문제가 발생할 수 있다. 이때 공유된 자원의 데이터는 한 번에 하나의 프로세스만 접근할 수 있도록 제한을

gyoogle.dev

 

2. 세마포어와 뮤텍스의 차이점

 

[면접총정리] 신입 개발자 인터뷰 대비 총정리 자료 - ⑤ 운영체제

🧑🏻‍💻 글을 시작하기에 앞서.. - 신입 개발자 인터뷰에서 자주 나오는 질문을 모아 한 번에 정리한 포스트입니다. - 신입 개발자 기술면접을 준비하는 사람으로, 정확하지 않은 정보가 포함

hoons-dev.tistory.com

 

3. 세마포어와 뮤텍스의 함수

 

tech-interview-study/contents/os.md at master · devham76/tech-interview-study

기술 면접 스터디를 기반으로 CS기본 개념을 정리하는 저장소입니다. Contribute to devham76/tech-interview-study development by creating an account on GitHub.

github.com

 

4. 세마포어와 뮤텍스 그림

 

[운영체제] Mutex 뮤텍스와 Semaphore 세마포어의 차이

프로세스 간 메시지를 전송하거나, 공유메모리를 통해 공유된 자원에 여러 개의 프로세스가 동시에 접근하면 Critical Section(여러 프로세스가 데이터를 공유하며 수행될 때, 각 프로세스에서 공유

heeonii.tistory.com

 

 

2. 페이징과 세그먼테이션의 차이는?

더보기
  • 페이징이란?
    • 고정 크기
    • 메모리는 해당 페이지와 동일한 크기의 프레임으로 분리해서 메인 메모리에 불연속적으로 저장하는 방식
    • '내부단편화'가 발생할 수 있습니다. (연속 할당 방식보다는 적게 발생합니다.)
  • 세그먼테이션이란?
    • 가변 크기
    • 세그먼트로 분리하고 메모리에 적재
    •  주로 논리적인 블록단위 세그먼트로 Code, Data, Stack & Heap으로 분리할 수 있습니다
    • 세그멘테이션 역시 '외부 단편화'가 발생합니다.
    • 세그먼트 테이블의 limit는 페이지 테이블에는 없는데, 그 이유는 세그먼트 크기는 가변적이기 때문에 크기를 명시해야 해당 세그먼트에 대해서만 접근할 수 있기 때문입니다.
더보기

 

3. 인터럽트란?

더보기
  • Interrupt(인터럽트)란?
    • 프로그램을 실행하고 있는 도중에 입출력 요청 혹은 예외 상황을 처리해야 하면 실행하던 프로그램을 멈추고 CPU가 해당 작업을 처리하도록 하는 것을 의미합니다.
더보기

 

4. 시스템 콜이란?

더보기
  • 시스템 콜(System call)이란?
    • fork( ), exec( ), wait( )와 같은 것들은 Process 생성과 제어를 위한 System call
    • 사용자나 응용프로그램이 커널에서 제공하는 기능을 사용하기 위한 인터페이스

 

 

5. PCB란?

더보기
  • PCB(Process Control Block)란?
    • 프로세스 메타데이터들을 저장해 놓는 곳, 한 PCB 안에는 한 프로세스의 정보가 담김
    • 프로세스를 관리하기 위한 정보를 포함하는 OS 커널의 자료 구조
    • 프로세스는 CPU를 할당받아 작업을 처리하다가, CPU를 선점 당하게 되면 진행 중이던 작업 내용을 PCB에 저장하고 CPU를 반환한다.
    • 이후에 다시 CPU를 할당받으면 PCB로 부터 진행이 끊겼던 부분에서 다시 작업을 실행한다
    • 프로세스 식별자, 상태, PC(프로그램 카운터, 다음 실행할 명령의 주소 가르킴), 메모리 관리 정보 등을 가지고 있다.