면접 질문
운영체제
1. OS(운영체제)가 무엇인지 설명
- 운영체제는 하드웨어 자원을 관리하고, 응용 프로그램과 하드웨어 사이이를 중재하는 인터페이스를 의미한다.
2. 커널이 무엇인지
운영체제 역시 프로그램이기 때문에 메인 메모리에 적재가 되어야 하나, 운영체제의 크기가 너무 커서 전체를 다 메인 메모리에 올리게 된다면 비효율적이다.
따라서 커널이라고 하는 항상 필요한 운영체제의 핵심 부분만을 메인 메모리에 적재하여 운영체제를 사용하게 한다.
즉, 커널은 메모리에 상주하는 운영체제의 핵심 부분이다.
3. 메모리의 구조를 영역에 따라서 설명
코드 영역(TEXT)
- 코드 자체를 구성하는 메모리 영역, 기계어로 제어되는 메모리 영역이다.
데이터 영역(STATIC)
- 전역 변수와 정적 변수가 저장되는 영역, 프로그램이 시작하는 동시에 할당되며, 프로그램이 종료되면 소멸된다.
힙 영역(HEAP)
- 사용자가 직접 관리하는 영역이며 메모리 공간이 동적으로 할당 및 해제된다.
스택 영역(STACK)
- 함수의 호출에 따른 지역변수와 매개변수가 저장되는 영역으로, 컴파일 시 크기가 결정된다.
함수의 호출이 종료되면 소멸된다.
4. 메모리의 힙 영역과 스택 영역의 차이에 대해 설명
- 스택 영역은 지역변수, 매개변수를 저장
힙에 비해 빠르며, 함수의 종료에 따라 소멸되므로 별다른 관리가 필요 없다.
- 힙 영역은 동적으로 생성된 변수
스택에 비해 느리며, 직접 힙 영역 관리가 필요하다.
5. 메모리의 힙 영역을 너무 크게 잡으면?
- 힙 영역은 메모리 관리가 필요하다. 따라서 넓은 힙 영역에 존재하는 동적 변수에 대해 참조 여부를 확인해야 하기 때문에 Garbage Collect의 수행시간이 너무 길어지게 된다.
6. 프로세스와 스레드의 차이를 설명해라
프로세스
- 메인 메모리에 적재되어 실행되는 프로그램을 의미한다.
- PCB, code, data, heap, stack 영역을 갖는다.
- 프로세스별 각각의 영역을 갖기 때문에 별다른 동기화 작업이 필요하지 않다.
- 하지만 각각의 독립된 영역을 갖기 때문에 context switching 비용이 크다.
- 한 프로세스에서 오류가 생기더라도 다른 프로세스에 영향을 주지 않는다. << 독립적
스레드
- 한 프로세스 내의 실행 단위이며 실행의 흐름을 의미한다.
- stack 영역만 별도로 갖으며, 나머지 영역(code, data, heap) 에 대해서는 해당 스레드를 포함한 프로세스의 자원을 공유
- stack 영역 외부의 공유 자원에 대해 접근 시 동기화 작업이 필요하다.
- stack 영역 외부를 공유하므로 context switching 비용이 적다.
- 한 스레드에 오류가 생기면, 나머지 프로세스 내의 스레드에 영향을 줄 수 있다.
7. 컨텍스트 스위칭에 대해서 설명하고, 왜 필요한지?
여러 프로세스를 처리해하는 상황에서 현재 진행중인 Task(프로세스 or 스레드)의 상태를 PCB에 저장하고, 다음에 진행할 Task의 상태 값을 읽어 레지스터에 적재하는 과정을 의미한다.
레지스터 = CPU가 요청을 처리하는 데 필요한 데이터를 일시적으로 저장하는 기억장치
CPU 속도는 I/O 작업에 비해 매우 빠르다. 따라서 I/O작업이 실행되고 Blocking이 되면, CPU는 아무일을 하지 않고 놀게된다. 컨텍스트 스위칭을 통해 다른 프로세스나 스레드의 작업으로 전환하면 CPU의 사용률을 높일 수 있다.
8. 프로세스 제어 블록(PCB)에 대해 설명해주세요
PCB는 프로세스 제어 블록(Process Control Block)은 프로세스를 관리하기 위한 정보를 포함하는 OS 커널의 자료 구조이다.
임시 저장소 느낌?
9. 멀티 스레드와 멀티 프로세스를 비교해주세요
멀티 쓰레드
- 하나의 프로세스를 여러 개의 스레드로 구성해 자원을 공유하면서 작업을 수행하는 것을 말한다.
멀티 프로세스보다 적은 메모리 공간을 차지하며, Context Switching이 빠른 장점이 있지만, 오류로 인해 하나의 스레드가 종료되면 전체에 영향을 미친다.
멀티 프로세스
- 하나의 프로그램을 여러개의 프로세스로 구성해 프로세스가 병렬적으로 작업을 수행하는 것이다.
하나의 프로세스가 죽더라도 다른 프로세스에 영향을 끼치지 않지만, 멀티 스레드보다 더 많은 메모리 공간을 차지한다.
10. 스레드마다 독립적으로 할당하는 2가지에 대해 설명해주세요
스레드는 독립적으로 스택 영역과 PC Register을 갖고 있습니다.
1) 독립적으로 스택 영역을 갖는 이유?
- 독립적으로 스택을 갖는다는 것은 곧 독립적으로 함수 호출이 가능하다는 것을 의미합니다. 즉, 프로세스 내의 독립적인 실행 흐름을 만들기 위해서 스레드마다 스택 영역을 갖는다.
2) 독립적으로 PC Register을 갖는 이유?
- PC Register값은, 스레드가 명령어를 어디까지 수행했는 지를 나타낸다. 스레드는 CPU를 할당받았다가, 스케줄러에 의해서 선점당해 컨텍스트 스위칭이 일어난다. 따라서 어디까지 실행이 되었는지 알아야 하므로 독립적으로 PC Register 값을 가진다.
11. 동기와 비동기의 차이에 대해 설명해주세요
동기는 요청과 그 결과가 동시에 일어난다는 약속이다.
요청을 하면 시간이 얼마가 걸리던지 요청한 자리에서 결과가 나와야한다. 따라서 그 결과가 나올때 까지 아무것도 수행하지 못한다.
비동기는 반대로 요청과 결과가 동시에 일어나지 않을 것이라는 약속이다.
요청을 하면 그 시간동안 다른 작업을 수행할 수 있고 자원을 효율적으로 사용할 수 있다는 장점이 있다.
12. Blocking 과 Non-Blocking에 대해 설명해주세요
Blocking은, A함수가 B함수를 호출할 때, B함수가 자신의 작업이 종료되기 전까지 A 함수에게 제어권을 돌려주지 않는다.
Non-Blocking은, A함수가 B함수를 호출할 때, B함수가 A 함수에게 곧바로 제어권을 돌려준다.
13. Race Condition(경쟁상태)과 Critical Section(임계영역)이 무엇이고, 경쟁상태를 막기 위해 어떤 방법을 사용하는지 설명해주세요
두 개 이상의 스레드가 공유자원에 대해 접근하려고 경쟁하는 것을 Race Condition
이 공유자원이 존재하는 구간으로 Race Condition이 일어날 수 있는 영역을 Critical Section(임계영역)이라고 한다.
이러한 임계영역에 대한 경쟁상태를 제거하기 위해서는 상호배제(Mutual Exclusion)을 사용하며 한 공유자원에 대해서 한 스레드만 접근을 허락한다.
14. DeadLock(교착상태)에 대해 설명하고, 해결 방법에 대해 설명하세요
DeadLock은 두 개 이상의 프로세스나 스레드가 서로 자원을 기다리면서 무한히 대기하는 상태를 의미한다.
조건은 4가지가 있다.
1. 상호 배제
- 한 자원에 여러 프로세스가 동시에 접근할 수 없다.
2. 점유 대기
- 하나의 자원을 소유한 상태에서 다른 자원을 기다린다.
3, 비선점
- 프로세스가 어떤 자원을 사용을 끝날 때 까지 프로세스의 자원을 뺏을 수 없다.
4, 순환 대기
- 각 프로세스가 순환적으로 다음 프로세스가 요구하는 자원을 갖고 있다.
15. Mutex(뮤텍스)와 Semaphore(세마포어)에 대해 설명해주세요
뮤텍스
- 오직 1개의 스레드만 접근 할 수 있다.
- 반드시 락을 획득한 프로세스가 락을 해제해야 한다.
세마포어
- 세마포어 변수만큼의 스레드가 접근 할 수 있다.
- 현재 수행중인 프로세스가 아닌 다른 프로세스가 세마포어를 해제할 수 있다.
뮤텍스와 세마포어를 사용해 경쟁상태를 제거할 수 있다!!
16. CPU의 성능 척도엔 무엇이 있는지?
이용률, 처리량, 소요시간, 대기시간, 응답시간
17. 선점(preemption)과 비선점(non-preemption)이 무엇인지?
선점은 특정 프로세스가 실행 중이더라도 CPU 할당을 뺏어 다른 프로세스에 부여할 수 있는 방식
비선점은 특정 프로세스가 실행 중이면 끝나기 전에는 절대로 다른 프로세스에게 CPU를 뺏기지 않는 방식
18. 동시성과 병렬성이 어떻게 다른지?
동시성은 Context Switching을 통해 동시에 실행되는 것 처럼 보이게 하는 것을 의미한다.
실제로 동시에 실행되는 것이 아닌, 번갈아 실행하는 것입니다.
병렬성은 실제로 동시에 여러 프로세스를 병렬적으로 실행하는 방식.
4코어 8스레드 = 1코어당 2개의 스레드
19. Interrupt(인터럽트)에 대해 설명해주세요
Interrupt(인터럽트)는 프로그램을 실행하고 있는 도중에 입출력 요청 혹은 예외 상황을 처리해야 하면 실행하던 프로그램을 멈추고 CPU가 해당 작업을 처리하도록 하는 것
20. 메모리의 종류에 대해 설명하고, 종류가 여러가지인 이유?
CPU에 가까운 순서대로 레지스터, 캐시, 주기억장치, 보조기억장치가 있다.
물리적 메모리의 종류가 많은 이유는, 접근 속도에 따른 차이를 두기 위해서
(레지스터 > 캐시 > 주기억 > 보조기억)
21. OS가 메모리 관리를 해야하는 이유에 대해 설명, 메모리 관리를 위해 어떤 전략을 사용하는지?
각각의 프로세스는 독립된 공간을 가진다. 따라서 각 프로세스는 다른 프로세스의 메모리 공간에 접근할 수 없다.
오로지 운영체제만이 운영체제 메모리 영역과 사용자 메모리 영역의 접근에 영향을 받지 않는다.
따라서 OS만이 메모리를 관리할 수 있기 때문에 적절한 관리가 필요하다.
가상메모리를 이용한 Swapping, 페이징 및 세그멘테이션 전략, 고정 길이 할당, 가변 길이 할당, 압축 등의 방식으로 OS가 메모리 관리를 수행할 수 있다.
22. 메모리의 fit의 종류 4가지에 대해 설명해라
First fit - 메모리의 처음부터 검사해서 크기가 충분한 첫번째 메모리에 할당
Next fit - 마지막으로 참조한 메모리 공간에서부터 탐색을 시작해 공간을 찾음
Best fit - 모든 메모리 공간을 검사해서 내부 단편화를 최소화하는 공간에 할당
Worst fit - 남은 공간 중에 가장 큰 공간에 할당
23. 페이징과 세그멘테이션에 대해 설명해라
페이징 : 프로세스를 동일한 크기의 페이지로 분리
만약 프로세스가 13MB이고 페이지가 4MB이면 한 페이지는 1MB가 된다. 3MB의 내부단편화가 발생할 수 있다.
세그멘테이션 : 프로세스를 가변적인 크기의 세그먼트로 분리하고 메모리에 적재한다.
code, data, stack, heap으로 분리할 수 있다. 외부 단편화가 발생한다.
24. 내부단편화와 외부단편화가 무엇인지?
내부단편화
- 물리메모리를 고정적인 길이의 파트로 잘랐을 때, 해당 파트의 길이보다 더 작은 크기의 조각이 들어가게 되어 생기는 여백
외부단편화
- 물리 메모리의 최대크기 - 사용중인 공간의 크기가 새로운 프로세스보다 작으면 적재할 수 없으므로, 이 여백을 외부 단편화라고 할 수 있다.
25. 가상메모리가 무엇인지?
프로세스 전체가 메모리 내에 올라오지 않더라도 실행이 가능하도록 하는 기법이다.
가상메모리가 없으면 실행되는 코드 전부를 적재해야 하므로 메모리 용량보다 큰 프로그램을 실행할 수 없다.
가상 메모리를 사용하면 동시에 많은 프로그램을 실행할 수 있고, 응답시간을 유지하면서 CPU 이용률과 처리율을 높일 수 있다.
26. 메모리가 고갈되면 일어나는 현상에 대해 설명해주세요
메모리가 고갈되었지만, 프로세스를 실행해야 하기 때문에 Swap이 활발해진다.
CPU 이용률이 하락하고, OS는 CPU 이용률이 낮으므로 오히려 프로세스를 추가하는 쓰레싱 현상이 발생한다
네트워크
1. OSI 7 Layer의 각 계층에 대해 설명해주세요
7계층(응용계층) : 최종 목적지로 응용 프로그램과 연관해 서비스를 수행하는 계층. HTTP, FTP, DNS
6계층(표현계층) : 데이터 압축 혹은 변환이 이뤄지는 계층. JPEG, MPEG
5계층(세션계층) : 데이터가 통신하기 위한 논리적 연결을 담당하는 계층. API, Socket
4계층(전송계층) : 종단 간 사용자들에게 신뢰성있는 데이터를 전달하는 계층. TCP, UDP
3계층(네트워크계층) : IP를 지정하고 라우터로 경로를 선택해 네트워크를 통해 데이터를 전달하는 계층.
2계층(데이터링크계층) : 신뢰성 있는 전송을 위해 에러 검출, 흐름제어를 담당하며 데이터의 물리적인 전송이 일어나는 계층. Ethernet
1계층(물리계층) : 데이터를 전기 신호로 변경하는 계층 Bit
2. 전송계층이 데이터 분실을 확인하는 방법에 대해 설명해주세요
전송계층에선 패킷 단위로 쪼개어 같은 목적지로 전송한다.
패킷에 각각 번호를 부여해 목적지에서 패킷을 재조립해서 패킷의 분실 여부를 확인한다.
3. DNS가 무엇인지 설명해주세요
Domain Name Server의 약어로, IP주소를 문자로 표현한 주소로 바꾸는 시스템 혹은 서버를 의미한다.
4. TCP Conncetion 시 3-way handshaking을 한다고 했는데, 이에 대해 설명해주세요
TCP는 신뢰성있는 전송을 위해 1:1로 서로 잘 연결되었음을 확인하는 과정을 거친다. 이 과정이 바로 3-way handshaking이라고 부른다.
1) Client가 Server에게 접속 요청 SYN 패킷을 보낸다.
2) 서버는 SYN 패킷을 받고, 해당 요청을 수락하는 ACK와 Client와 연결하겠다는 SYN 패킷을 동시에 보낸다.
3) Client는 서버에게 확인 응답으로 ACK 패킷을 보낸다.
5. 포트가 무엇이고, 소켓이 무엇인지?
포트는 네트워크를 통해 데이터가 주고받는 프로세스를 식별하기 위해서 호스트 내부적으로 프로세스가 할당받는 고유한 값 하나의 IP 주소 내에 개별적으로 부여된 통신 프로세스
소켓은 네트워크 상에서 동작하는 프로그램 간 통신의 종착점으로, 두 시스템 사이의 네트워크 연결을 나타내는 객체이다.
6. TCP 와 UDP의 차이에 대해 설명해주세요
TCP는 연결형 서비스를 지원하며 흐름제어, 오류제어, 혼잡제어를 통해 신뢰성을 보장한다.
따라서 UDP에 비해 느리며 1:1 통신을 한다.
UDP는 비연결형 서비스를 지원하며 연결과정이 필요없으며 전송 순서를 보장하지않고 수신여부도 확인을 하지 않는다.
따라서 TCP에 비해 빠르다.
1.iot란?
- 인터넷을 통해 데이터를 다른 기기 및 시스템과 연결 및 교환할 목적으로 센서, 소프트웨어, 기타 기술을 내장한 물리적객체의 네트워크를 의미한다.
ex) 커넥티드
2. .net?
winform은 원래 .net framework 기반이였는데 .net core 3.0으로 올라오면서 .net 카테고리에 포함이 되었다
3. NDK, SDK, JDK에 대해서 알고 있는가?
NDK는 Andriod에서 C 및 C++ 코드를 사용할 수 있게 해주는 도구 모음
SDK는 주로 UI를 기반으로 특화된 API를 제공하여 Application Level에서의 개발을 쉽게 해주며 기반은 Java이다.
Android Emulator를 내장하고 있어 Build와 동시에 바로 Test까지 가능하다.
JDK는 개발자들이 자바로 개발하는 데 사용되는 SDK 키트이다.
JDK안에는 자바를 개발할 때 필요한 라이브러리와 개발 도구들이 포함되어있다.
4. CI / CD
Continuous Integration 지속적인 통합이라는 의미
버그를 신속하게 찾아 해결하고, 소프트웨어의 품질을 개선하고, 새로운 업데이트의 검증 및 릴리즈의 시간을 단축시키는 것에 있다.
Continuous Delivery 혹인 Continuous Depolyment
지속적인 서비스 제공
개발자의 환경을 넘어, 고객의 프로덕션 환경까지 릴리즈 되는 것
ex) 프로덕션 - 생산 단계(사용자에게 배포하기 전)
쿠버네티스?
- 장애 및 시스템 업그레이드, 롤백을 담당하고 끊임없는 변화에 대처한다.