본문 바로가기

CS 기술면접

CS 기술면접 운영체제 끝내기(1) - 프로세스, 스레드와 관련된 모든 것

걱정이 많아서 CS기술 면접을 준비할 때 전공책과 관련 서적에 나오는 프로세스와 스레드에 관련된 거의 모든 내용을 다 정리해 놨었습니다. 정리하는데만 꼬박 한 달이 걸린 것 같네요,, 다들 합격하세요 ~ 

프로세스란 무엇입니까?
  • 프로세스란 컴퓨터에서 실행되고 있는 프로그램으로 운영체제로 부터 자원을 할당받는 작업의 단위입니다.
프로세스의 특징을 설명하세요.
  • 프로세스는 각각 독립된 메모리 영역 (code, data, stack, heap구조)을 할당받습니다.
  • 기본적으로 프로세스 당 최소 한 개의 스레드(메인 스레드)를 가지고 있습니다.
  • 각 프로세스는 별도의 주소 공간에서 실행되며, 한 프로세스는 다른 프로세스의 영역에 접근할 수 없습니다.
PCB (프로세스 제어 블록)이란 무엇입니까?
  • 프로그램이 프로세스가 되기 위해 메모리에 올라오는 동시에 프로세스 제어 블록이 생성된다. 프로세스가 종료되고 메모리에서 삭제되면서 프로세스 제어 블록도 폐기된다.
PCB (프로세스 제어 블록)에 포함되는 것은? 
  • 프로세스 구분자
  • 메모리 관련 정보 : 실행하려는 프로세스가 메모리 어디에 저장되어 있는지
  • 각종 중간값 : 프로세스가 사용했던 중간값이 저장
프로세스의 상태
  • 생성 상태 : 프로그램을 메모리에 가져와 할당하고, 제어 블록을 생성한 상태
  • 준비 상태 : 실행을 기다리는 모든 프로세스가 자기 차례를 기다리는 상태
  • 실행 상태 : 선택된 프로세스가 cpu를 사용하는 상태. 프로세스 사이의 문맥 교환이 일어남
  • 대기 상태 : 실행 상태에 있는 프로세스가 입출력을 요청하면 입출력이 완료될 때까지 기다리는 상태
  • 완료 상태 : 프로세스 종료. 메모리와 프로세스 제어 블록 삭제
프로세스 상태 전이 
  • 웨이크업 : 웨이크업이란 입출력 작업이 완료되어 프로세스가 대기 상태에서 준비 상태로 전이되는 과정입니다.
  • 스풀링: 스풀링이란 성능 향상을 위해 입출력할 데이터를 직접 입출력 장치에 보내지 않고 나중에 한꺼번에 입출력하기 위해 디스크에 저장하는 과정을 의미합니다.
  • 디스패치 : 디스패치란 준비 상태인 프로세스 중 하나가 프로세서를 할당받아 실행 상태로 전이되는 과정을 의미합니다.
프로세스의 생성에서 실행까지의 과정
  • 프로세스는 프로그램을 실행할 때 생성된다. → 운영체제는 프로그램을 메모리로 가져와 코드 영역에 넣고 프로세스 제어 블록을 생성함 → 메모리에 데이터 영역과 스택 영역을 확보 → 프로세스 실행
fork() 시스템 호출
  • 실행 중인 프로세스를 복사하는 함수이다. 이때 실행하던 프로세스는 부모 프로세스, 새로 생긴 프로세스는 자식 프로세스가 된다.
fork() 시스템 호출의 장점
  • 프로세스의 생성 속도가 빠르다 : 하드디스크로부터 프로그램을 새로 가져오지 않고 기존 메모리에서 복사하기 때문에
  • 추가 작업 없이 자원을 상속할 수 있다
  • 시스템 관리를 효율적으로 할 수 있다 : 프로세스를 종료했을 때 필요한 메모리 영역, 파일, 하드웨어 정리를 부모 프로세스에 맡긴다.
exec() 시스템 호출
  • 기존의 프로세스를 새로운 프로세스로 전환하는 함수이다. 프로세스 구조체를 재활용하는 데에 목적이 있다.
프로세스 계층 구조
  • 부모 프로세스를 복사하여 자식 프로세스를 만드는 방법으로 프로세스끼리 계층 구조를 갖는 것을 말한다. 부모 프로세스는 자신의 자원을 자식 프로세스에 상속하고 자식 프로세스가 종료되면 그 자원을 회수한다. 이는 동시에 여러 작업을 처리하고 종료된 프로세스의 자원을 회수하는데 유용하다.
고아 프로세스
  • 부모 프로세스가 자식 프로세스보다 먼저 종료되면 자식 프로세스는 고아 프로세스가 된다.
좀비 프로세스
  • 자식 프로세스가 종료되었지만 부모 프로세스가 자식 프로세스의 종료 상태를 회수하지 않았을 경우에 자식 프로세스를 좀비 프로세스라고 한다.
wait() 시스템 호출
  • 고아 프로세스가 생기는 것을 방지하기 위해 사용. 자식 프로세스가 끝나기를 기다렸다가 자식 프로세스가 종료되면 다음 문장을 실행한다.
프로세스 통신의 분류
  • 프로세스 내부 데이터 통신 : 프로세스 내부의 스레드들이 전역변수나 파일을 이용하여 데이터를 주고받음
  • 프로세스 간 데이터 통신 : 같은 컴퓨터 내에 있는 여러 프로세스들이 공용 파일 또는 운영체제가 제공하는 파이프를 이용하여 통신
  • 네트워크를 이용한 통신 : 여러 컴퓨터가 네트워크로 연결되어 있을 때. 소켓 이용
프로세스 통신 종류
  • 양방향 통신 : 일반적 통신, 소켓
  • 반양방향 통신(양쪽 방향으로 전송 가능, 동시 전송 불가능) : 무전기
  • 단방향 통신 : 전역 변수, 파일, 파이프
  • 대기가 있는 통신(동기화 통신) : 파이프, 소켓
  • 대기가 없는 통신(비동기화 통신) : 전역변수, 파일
파이프 통신
  • 하나의 프로세스에서 다른 프로세스에게 데이터 흐름을 연결할 때 사용 (단방향 통신)
  • 부모 자식 프로세스 혹은 같은 부모의 자식 프로세스처럼 서로 관련 있는 프로세스 간 통신에 사용됨
  • pipe함수를 호출하고 파이프의 [1]은 쓰기용 파이프, [0]은 읽기용 파이프
message queue
  • 메모리를 이용한 파이프로, 커널에서 제공하는 fifo구조의 메시지 큐를 사용한다. (프로세스 간 단방향 통신)
shared memory
  • 시스템 상의 공유 메모리를 통해 통신 (프로세스 간 양방향 통신)
  • 일정한 크기의 메모리를 프로세스 간에 공유하는 구조로, 공유 메모리는 커널에서 관리된다.
스레드는 무엇입니까?
  • 스레드는 cpu의 기본 단위로, 프로세스의 실행 단위를 말합니다. 스레드는 프로세스 내에서 각각 스택만 할당받고, 코드, 데이터, 힙 영역은 공유합니다.
스레드의 특징을 설명하세요
  • 스레드는 프로세스 내에서 각각 스택만 할당받고 코드, 데이터, 힙 영역은 공유합니다. (별도의 레지스터도 갖고 있기는 하다.)
  • 한 스레드가 프로세스 자원을 변경하면 다른 이웃 스레드도 그 변경 결과를 즉시 볼 수 있습니다.
스택을 스레드마다 독립적으로 할당하는 이유
  • 스택은 함수 호출 시 지역변수와 매개변수를 저장하기 위한 메모리 공간 이므로, 스택이 독립적으로 할당되어야 독립적인 함수 호출이 가능합니다. 즉, 독립적인 실행 흐름을 추가하기 위한 최소 조건으로 독립된 스택을 할당하는 것입니다.
프로세스와 스레드의 차이
  • 프로세스는 독립적인 메모리를 할당받고, 다른 프로세스의 영역에 접근할 수 없습니다. 반면, 스레드는 독립적인 스택 영역만 가지고 코드, 데이터, 힙 영역은 같은 프로세스 내의 모든 스레드들과 공유합니다.
  • 프로세스는 운영체제로부터 자원을 할당받는 작업의 단위이고, 스레드는 프로세스가 할당받은 자원을 이용하는 실행의 단위입니다.
병렬 처리 기법
  • 파이프라인 기법 : 하나의 코어에서 작업을 나누어 병렬로 처리
  • 슈퍼스칼라 기법 : 여러 개의 코어를 사용하여 동시에 작업을 진행
동기화란
  • 공유 자원에 대하여 동시에 접근하는 프로세스, 스레드들로 인해 발생하는 문제를 해결하기 위해 행하는 방식입니다.
  • 여러 프로세스나 스레드가 동시에 하나의 공유 자원에 접근하려 할 때, 순서를 정해서 공유하는 자원의 일관성을 유지하는 것입니다.
멀티 태스킹
  • 운영체제가 cpu에 작업을 줄 때 시간을 잘게 나누어 배분하는 기법이다. 작업을 번갈아가며 수행하다 보니 사용자는 동시여 여러 작업이 수행되고 있다고 느끼게 된다. (=시분할 시스템)
멀티 스레딩
  • 멀티 스레딩이란 하나의 프로세스를 다수의 스레드로 만들어서 실행하는 것을 의미합니다.
  • 이렇게 되면 하나의 프로세스에서 다수의 실행 단위들이 필요한 자원을 공유하기 때문에 메모리 공간과 시스템 자원 소모가 줄어들게 됩니다. 또, 프로세스 간의 통신 방법에 비해 통신 방법도 훨씬 간단하고 빠릅니다.
  • 그러나, 서로 다른 스레드가 데이터와 힙 영역을 공유하기 때문에 어떤 스레드가 다른 스레드에서 사용 중인 변수나 자료구조에 접근하여 엉뚱한 값을 읽어오거나 수정할 수 있어, 동기화 작업이 필요합니다. 또, 오류로 인해 하나의 스레드가 종료되면 전체 스레드가 종료될 수 있습니다.
멀티 스레딩 vs 멀티 프로세스
  • (멀티 스레딩 : 자원의 효율 + 처리비용, 응답 시간 감소)
  • 멀티 스레드는 멀티 프로세스보다 자원 소모가 적고, 처리 비용과 응답 시간이 감소한다는 장점이 있지만, 오류로 인해 하나의 스레드가 종료되면 전체 스레드가 종료될 수 있다는 수 있고 동기화 작업이 필요합니다.
  • 반면, 멀티 프로세스 방식은 하나의 프로세스가 죽더라도 다른 프로세스에는 영향을 끼치지 않고 정상적으로 수행된다는 장점이 있지만, 멀티 스레딩보다 많은 메모리 공간과 cpu시간을 차지한다는 단점이 있습니다.
멀티 프로세서/프로세싱 시스템(다중 처리 시스템)
  • CPU(프로세서)를 여러 개 사용하여 여러 개의 스레드를 동시에 처리하는 작업 환경 
  • 하나의 프로세서가 고장 나더라도 다른 프로세서를 이용하여 업무를 처리할 수 있습니다. 프로세서(cpu)가 많을수록 처리량이 크게 증가합니다.
멀티프로그래밍 시스템 (다중 프로그래밍)은 무엇입니까?
  • 하나의 cpu와 주기억 장치를 이용하여 여러 개의 프로그램을 동시에 처리하는 방식입니다. cpu가 수행할 작업을 항상 가지도록 합니다. 주기억장치에서 2개 이상의 프로그램을 기억시켜 놓고, 하나의 CPU와 대화하면서 동시에 처리합니다.
싱글 스레드
  • 싱글 스레드는 하나의 프로세스에서 하나의 스레드를 실행하는 것을 의미합니다. 자원 접근에 대한 동기화를 신경 쓰지 않아도 되며 작업 전환을 요구하지 않는다는 장점이 있지만, 여러 개의 CPU를 활용하지 못합니다.
  • (자바스크립트는 싱글 스레드 언어)
멀티스레드 모델
  1. 커널 스레드 : 커널이 직접 생성하고 관리하는 스레드
  2. 사용자 스레드 : 라이브러리에 의해 구현된 일반적인 스레드
사용자 스레드
  • 사용자 프로세스 내에 여러 개의 스레드가 존재하지만 커널 스레드 하나와 연결되기 때문에 1 to N모델이라고 한다.
  • 라이브러리가 직접 스케줄링하고 작업에 필요한 정보를 처리하기 때문에 문맥 교환이 필요 없다.
  • 여러개의 스레드가 하나의 커널 스레드와 연결되기 때문에 커널 스레드가 대기상태에 들어가면 모든 사용자 스레드가 같이 대기하게 된다.
  • 한 프로세스의 타입 슬라이스를 여러 스레드가 공유하기 때문에 여러 개의 CPU를 공유할 수 없다. - 커널 입장에서는 사용자 스레드들이 하나의 프로세스로 인식되기 때문에
  • 사용자 스레드가 커널 스레드를 사용하려면 시스템 호출로 커널 기능을 이용해야 한다.

커널 스레드
  • 하나의 사용자 스레드가 하나의 커널 스레드와 연결되기 때문에 1 to 1 모델이라고 한다.
  • 커널 스레드는 독립적으로 스케줄링되므로 특정 스레드가 대기 상태에 들어가도 다른 스레드는 작업을 계속할 수 있다.
  • 커널 스레드는 커널 레벨에서 모든 작업을 지원하기 때문에 멀티 CPU를 사용할 수 있고, 하나의 스레드가 대기 상태에 있어도 다른 스레드는 작업을 계속할 수 있다.
  • 커널의 기능을 사용하므로 보안에 강하고 안정적으로 작동한다.
  • 문맥 교환을 할 때 오버헤드 때문에 느리게 작동한다.
반응형