면접을 위한 CS 지식

클라우드 엔지니어 면접을 위한 CS 지식 정리 2 - 가상화와 OS

갈색말 2023. 8. 11. 21:35

가상화

 

문제편

 

1. 전가상화, 반가상화에 대해 설명하시오.

2. Type 1, Type 2 가상화에 대해 설명하시오.

3. Ring Level에 대하여 설명하시오.

 

운영체제 OS

1. 디코딩과 인코딩, 아스키 코드와 유니코드에 대해 설명하시오.

2. 고급 언어와 저급 언어의  차이에 대해 설명하시오.

3. 프로세스와 스레드의 차이에 대하여 설명하시오.

4. 좀비 프로세스와 고아 프로세스의 차이에 대해 설명하시오.

5. 인터럽트와 트랩의 차이에 대해 설명하시오.

 

6. OS 커널의 각각 역할에 대해 설명하시오.

7. 전원 부팅부터 OS 부팅 과정을 설명하시오. (Linux)

8. BIOS UEFI 차이에 대해 설명하시오.

9. Linux Run Level 대해 설명하시오.

10. 프로세스 교착 상태(Deadlock)이란 무엇인가?

 

11. 코어덤프와 커널덤프의 차이에 대해 설명하시오.

 

 

 

 

 

해답편

 

1. 전가상화, 반가상화에 대해 설명하시오.

==> Guest OS를 수정하는가?의 여부에 따라

- 전가상화 : G.OS를 수정하지 않음. 따라서 OS가 달라 명령어 전달이 안될 수 있음. 그 중간에서 G.OS의 커널이 개입해야하는 요청을 처리하는 특권 주체가 H/W 또는 Hypervisior.

- 반가상화 : G.OS를 수정.

 

 

2. Type 1, Type 2 가상화에 대해 설명하시오.

==> Host OS가 존재하느냐에 따라

- Type 1 : H/W - Hypervisior - Guest OS

- Type 2 : H/W - Host OS - Hypervisior - Guest OS

 

3. Ring Level에 대하여 설명하시오.

==> 컴퓨터 시스템에서의 리소스 및 작업 접근의 우선 수위가 필요하며, 이것이 보호링.

x86 아키텍쳐에서는 ring 0 부터 4까지의 특권에 따른 level로 나뉘어 있다.

- Ring 0 : 커널 모드. 시스템 명령어와 리소스에 대한 가장 높은 권한. 

- Ring 1 : 드라이버 모드. 하드웨어에 특정 부분만 접근.

- Ring 2 : 사용자 모드. 하드웨어에는 접근 불가능.

- Ring 3 : App이 실행되는 권한 수준.

 

 

운영체제 OS

1. 디코딩과 인코딩, 아스키 코드와 유니코드에 대해 설명하시오.

=>

- 디코딩 : 0과 1 => 문자 과정. 사람이 이해할 수 있게 변화하는 과정

- 인코딩 : 문자 => 0과 1. 컴퓨터가 이해할 수 있게 변화하는 과정

   - 아스키 코드 : 인코딩 방식 중 영문과 특수문자.

   - 유니코드 : 인코딩 방식 중 전세계 문자와 특수 문자. UTF-8

 

2. 고급 언어와 저급 언어의  차이에 대해 설명하시오.

=>

- 고급 언어 : 사람이 이해하는 언어. 프로그래밍 언어. C, C++ 등

- 저급 언어 : 컴퓨터가 이해하는 언어.

   - 기계어 : 0과 1

   - 어셈블리어 : 0과 1을 더 편하게 보기 위한 언어

 

* 고급 언어가 저급 언어로 변환되는 과정

   - 컴파일 언어 : 전체를 한 번에. 컴파일러로 변환. 이 과정을 컴파일이라고 함.

 --------------# configure && make : 소스코드를 컴파일하여 프로그램으로 바꾸는 리눅스 명령어

 --------------# make install : 프로그램을 OS에 설치하는 명령어

   - 인터프리터 언어 : 한줄씩 변환.

 

3. 프로세스와 스레드의 차이에 대하여 설명하시오.

=> 먼저 리눅스는 프로세스와 스레드를 명확히 구분짓지 않는다. Task로 통일.

- 프로세스 : 실행 중인 작업의 단위

- 스레드 : 프로세스를 이루는 작업의 단위

 

* 프로그램과 소프트웨어의 차이

- 프로그램 : 특정 작업을 위한 명령어의 집합

- 소프트웨어 : 프로그램들로 만든 하나의 App

 

4. 좀비 프로세스와 고아 프로세스의 차이에 대해 설명하시오.

=> 프로세스는 부모와 자식 프로세스로 함께 구성되고, 자식이 작업을 다하면 부모 프로세스도 따라서 죽게 된다. 즉 순서대로 연달아 죽는 것이 일반적이다. 그러나 순서대로 함께 안 죽을 때 문제가 생긴다.

- 좀비 프로세스 : 자식 프로세스만 먼저 죽음. 자식이 종료되었지만 상태 정보는 남아있어(오류), 부모 프로세스도 종료되지 못하고 떠도는 상태.

- 고아 프로세스 : 부모 프로세스만 먼저 죽음. 자식 프로세스는 부모가 없어 떠돌게 됨. 이 경우 OS가 새 부모를 할당해주거나, init 프로세스가 부모가 되기도 함.

==> 좀비와 고아 프로세스가 생기면 불필요한 프로세스로 인해 자원이 고갈되고, 따라서 성능이 저하된다.

 

5. 인터럽트와 트랩의 차이에 대해 설명하시오.

=> OS가 원래 작업중이던 프로세스를 중단하고 그 이벤트를 처리하게 만드는 비동기적(=돌발) 이벤트.

- 인터럽트 : 하드웨어적 돌발 이벤트. 프린터나 USB 감지 등.

- 트랩 : 소프트웨어적 돌발 이벤트. 프로그래밍 오류.

 

6. OS 커널의 각각 역할에 대해 설명하시오.

=>

- OS : 프로그램에 필요한 자원을 할당하고 관리하는 관리자

- 커널 : 자원 접근, 프로그램 실행 등 OS의 핵심 담당 가능

- OS에서 커널을 제외한 부분들 : Userspace(사용자 공간), 라이브러리(기타 요소)

 

7. 전원 부팅부터 OS 부팅 과정을 설명하시오. (Linux)

=>

POST 과정 (Post On Self Test) CPU

1) 전원 ON -> 메인보드에 전력공급
2) BIOS
가 CPU, Memory 등의 상태 확인

3) 디스크의 MBR(선두 512byte)의 부트스트랩 로더(446byte)가 부트 파티션(/boot)에 있는 GRUB(부트로더)를 메모리에 적재

4) CPU가 메모리에 적재된 GRUB 실행

 

GRUB 과정 - GRUB 실행 단계에서 설정 가능한

(GRUB=부팅 메뉴 표시 부트 옵션 수정 기능 제공)

5-1) 커널을 선택/변경할 수 있다.
5-2)
부트옵션을 변경할 수 있다.
5-3)
런레벨을 변경할 수 있다.

* 커널 선택시
6) GRUB
은 커널과 초기RAM 디스크(-디스크에 액세스하기 위한 디바이스 드라이버가 포함된 아카이브 파일)를 메모리에 적재
7)
이로써 커널 실행

 

커널의 부팅 과정

8) 커널은 swapeer 프로세스 PID 0를 호출, 커널이 장치드라이브 초기화
9) /(
루트 파티션)를 읽기 전용으로 마운트, fsck 체크
10)
문제없으면 읽기+쓰기로 마운트
11) init PID 1-
모든 프로세스의 1번을 호출

 

init 프로세스 과정

12) 주요 시스템 서비스 데몬이 줄줄이 가동.

 

8. BIOS UEFI 차이에 대해 설명하시오.

=> 컴퓨터의 부팅 및 하드웨어 초기화를 관리하는 펌웨어이며,

- BIOS : 구버전. 텍스트 기반. 순차적 초기화. MBR 이용

- UEFI : 신버전. 그래픽 기반. 병렬로 초기화. GPT 이용. Secure Boot으로 보안 부팅 사용 가능.

 

 

9. Linux Run Level 대해 설명하시오.

=>

Run Level 0: 시스템 종료 모드. 시스템을 종료할 때 사용.
Run Level 1:
단일 사용자 모드 또는 복구 모드. 시스템 유지 관리 및 문제 해결을 위해 사용.
Run Level 2:
다중 사용자 모드, 그러나 네트워크 서비스가 비활성화된 모드.
Run Level 3:
다중 사용자 모드. 네트워크와 기본 서비스가 활성화되어 있는 일반적인 모드.
Run Level 4:
일반적으로 사용되지 않는 레벨이며, 사용자 정의를 위해 예약.
Run Level 5:
시스템 재부팅 모드. 시스템을 재부팅할 때 사용.
Run Level 6:
시스템 재시작 모드. 시스템을 재시작할 때 사용.

 

10. 프로세스 교착 상태(Deadlock)이란 무엇인가?

=> 프로세스들이 서로 자원을 점유하여 무한정 대기만 하는 상황

 

11. 코어덤프와 커널덤프의 차이에 대해 설명하시오.

==> 시스템내부의 문제 발생시 그 순간 여러 가지 정보를 로그처럼 기록하되, 이진 바이너리 파일로 저장하는 것. 그래야 컴퓨터가 빠르게 이해할 수 있다. 추후 디버깅에 쓰인다.

- 코어 덤프 : 프로세스의 메모리 덤프.

- 커널 덤프 : 커널의 메모리 덤프.