본문 바로가기

CS 기술면접

CS 기술면접 운영체제 끝내기(3)

커널이란 무엇입니까?

커널은 운영체제의 모든 부분에 대한 기본 서비스를 제공하는 컴퓨터 운영 체제의 핵심이 되는 컴퓨터 프로그램으로, 시스템의 모든 것을 완전히 통제함

뮤텍스와 세마포어

뮤텍스와 세마포어 모두 공유자원을 안전하게 관리하게 관리하기 위해서, 한 자원에 대한 여러 프로세스 또는 스레드의 동시 접근을 불가능하게 하는 상호 배제 기법

차이는 동기화 대상의 개수. 뮤텍스는 동기화 대상이 하나고, 세마포어는 동기화 대상이 하나 이상일 때 

  • 뮤텍스는 오직 하나의 스레드 혹은 프로세스에 의해 소유될 수 있는 키를 기반으로 한 상호 배제 기법, 키를 소유한 스레드/프로세스 만이 자원에 접근 가능
  • 세마포어는 현재 공유 자원에 접근할 수 있는 스레드 혹은 프로세스의 수를 나타내는 값을 두는 기법
메모리 영역/구조에 대해 설명하시오
  • 코드 영역 : 프로그램의 본문이 기술되는 곳, 프로그래머가 작성한 프로그램이 올라간다.
  • 힙 영역 : 사용자에 의해 관리되는 동적 할당 영역으로 런타임에 크기가 결정됨
  • 스택 영역 : 프로세스를 실행하기 위해 부수적으로 필요한 데이터를 모아놓은 곳. 함수가 종료됐을 때 되돌아올 메모리의 주소를 스택에 저장한다. 지역변수, 매개변수 저장
  • 데이터 영역 : 코드가 실행되면서 사용하는 변수나 파일 등의 각종 데이터를 모아놓은 곳
정적 할당 영역(코드, 데이터) 

포인터를 제외한 일반적인 변수는 선언할 때 그 크기가 결정된다. 따라서 코드 영역과 데이터 영역은 프로세스가 실행되기 직전에 위치와 크기가 결정되고 실행되는 동안 변하지 않는다.

동적 할당 영역(힙, 스택) 

스택 영역과 힙 영역은 프로세스가 실행되는 동안 만들어지는 영역이다.

런타임과 컴파일 타임의 차이를 설명하시오
  • 런타임은 컴파일 과정을 마친 응용 프로그램이 사용자에 의해 실행되어지는 때를 의미한다. 런타임 에러는 컴파일이 완료되어 프로그램이 실행 중임에도 의도치 않은 예외상황으로 발생하는 오류를 의미한다.
  • 컴파일 타임은 개발자에 의해 작성된 소스코드가 컴퓨터가 인식할 수 있는 기계어 코드를 변환되는 과정을 의미한다. 컴파일 타임 에러는 syntax error와 같이 소스코드가 컴파일되는 과정에 발생하는 에러이다.
버퍼

속도에 차이가 있는 두 장치 사 에이서 그 차이를 완화하는 역할을 한다.

캐시

메모리와 cpu 간의 속도 차이를 완화하기 위해 메모리의 데이터를 미리 가져와 저장해두는 임시 장소. 캐시는 cpu안에 있다.

  • 원하는 데이터가 캐시 내에 있다면 cache hit, 없다면 cache miss → 적중률 = cache hit가 되는 비율
  • 데이터가 변경될 때 - 즉시 쓰기 / 지연 쓰기
성능 향상 방법
  1. 저장장치로 느린 하드디스크 대신 SSD 같은 빠른 플래시 메모리를 사용한다.
  2. 메모리를 하드디스크 크기만큼 확장한다.
  3. 캐시를 크게 늘려 캐시 적중률을 높인다.
문맥 교환(콘텍스트 스위칭, 작업 전환)
  • cpu를 차지하던 프로세스가 나가고 새로운 프로세스를 받아들이는 작업.
  • p1→p2로 문맥 교환이 일어난다고 할 때, 실행 상태이던 p1의 프로세스 제어 블록에 현재까지의 작업 결과가 저장되고, p1은 준비 상태가 된다. cpu의 레지스터는 p2의 프로세스 제어 블록 값으로 채워지고 다음 작업을 하게 된다.
메모리 계층 구조

레지스터 > 캐시 > 메모리 > 하드디스크

메모리 계층 구조란 메모리를 필요에 따라 여러 가지 종류로 나눠두는 것을 의미한다. 레지스터와 캐시는 cpu내부에 존재하므로 cpu에 아주 빠르게 접근할 수 있다. 메모리는 cpu외부에 존재해, 레지스터와 캐시보다 더 느리게 접근할 수 있다. 하드 디스크는 cpu가 직접 접근할 방법조차 없다. cpu가 하드 디스크에 접근하기 위해서는 하드 디스크의 데이터를 메모리로 이동시키고 메모리에서 접근해야 한다.

레지스터

cpu가 연산을 하려면 필요한 데이터를 cpu로 가져와 임시 보관해야 하는데, 이때 임시 보관을 위해 사용되는 장소가 레지스터이다.

레지스터의 종류
  • 사용자 불가시 - 사용자가 임의로 변경 X
    • 레지스터 (DR) : 데이터 임시 보관
    • 주소 레지스터 (AR) : 데이터/명령어가 저장된 메모리 주소 저장
  • 사용자 가시 - 사용자가 임의로 변경 가능
    • 프로그램 카운터 (PC) = 명령어 포인터 : 다음에 실행할 명령어의 주소 저장
    • 명령어 레지스터 (IR) : 현재 실행 중인 명령어 저장
    • 메모리 주소 레지스터 (MAR) : 메모리에서 데이터 가져오거나, 메모리로 데이터 보낼 때 주소 지정
    • 메모리 버퍼 레지스터 (MBR) : 메모리에서 가져온 데이터 & 메모리로 옮길 데이터 임시 저장 → MAR과 함께 사용
주기억장치 (메인 메모리)

cpu에서 직접 접근이 가능한 메모리로, RAM과 ROM이 있음

  1.  RAM
    • RAM은 사용자가 자유롭게 읽고 쓸 수 있는 기억장치로, 컴퓨터가 켜지는 순간부터 cpu는 연산을 하고 동작에 필요한 모든 내용이 전원이 유지되는 내내 이 기억장치에 저장됨
    • 전원이 꺼지면 기억된 내용이 모두 사라지는 휘발성 메모리
  2. ROM
    • ROM은 기억된 내용을 읽을 수만 있는 기억장치로서 일반적으로 쓰기는 불가능
    • 전원이 꺼져도 기억된 내용이 지워지지 않는 비 휘발성 메모리
메모리 오버레이
  • 프로세스의 크기가 실제 메모리(물리 메모리) 보다 클 때 전체 프로세스를 메모리에 가져오는 대신 적당한 크기로 잘라서 가져오는 기법이다.
스왑
  • 메모리가 모자라서 쫓겨난 프로세스는 하드디스크와 같은 저장장치의 특별한 공간에 모아두는데 이러한 영역을 스왑 영역이라고 한다.
가상 메모리(virtual memory)란 무엇입니까?
  • 가상 메모리는 프로세스가 메모리 외부에서 실행될 수 있도록 하는 메모리 관리 기술. RAM의 부족한 용량을 보완하기 위해 각 프로그램에 실제 메모리 주소가 아닌 가상의 메모리 주소를 할당하는 방법. (덜 중요한 것들을 하드디스크에 옮겨둠)
메모리 단편화란 무엇인가?

메모리 공간이 작은 조각으로 나뉘어 사용 가능한 메모리가 충분히 존재하지만 할당이 불가능한 상태

  • 외부 단편화 : 할당할 프로세스의 크기보다 메모리에 남아있는 조각이 작아서 할당이 불가능한 현상
  • 내부 단편화 : 각 메모리 조각에 프로세스를 배치하고 공간이 남는 현상을 말한다.
세그먼테이션(segmentation)

가변 분할 방식을 이용한 가상 메모리 관리 기법으로 물리 메모리를 프로세스의 크기에 따라 가변적으로 나누어 사용한다. 이를 통해 내부 단편화는 해결할 수 있으나, 외부 단편화는 해결되지 않는다.

페이징

고정 분할 방식을 이용한 가상 메모리 관리 기법으로 물리 주소 공간을 같은 크기로 나누어 사용한다. 가상 주소의 분할된 각 영역은 페이지라고 부르며, 물리 메모리의 각 영역은 프레임이라 부른다. 프로세스의 효율적인 운영이 가능하고 외부 단편화 문제를 해결할 수 있다는 장점이 있지만, 내부 단편화 문제의 비중이 늘어나게 된다.

단편화 해결 방법

단편화 해결 방법으로는 통합 기법과 압축 기법 등이 있다.

  • 통합 기법은 주기억 장치 내에 인접해 있는 단편화된 공간을 하나의 공간으로 통합하는 작업
  • 압축 기법은 주기억장치 내에 분산되어 있는 단편화된 빈 공간을 결합하여 하나의 큰 가용 공간을 만드는 작업
교착상태 

2개 이상의 프로세스가 다른 프로세스의 작업이 끝나기만 기다리며 작업을 더 이상 진행하지 못하는 상태를 말한다. 시스템 자원, 공유 변수, 응용프로그램 등을 사용할 때 발생할 수 있다.

자원 할당 그래프

프로세스가 어떤 자원을 사용 중이고 어떤 자원을 기다리고 있는지를 방향성이 있는 그래프로 표현한 것

반응형