지난 시간동안 컴퓨터 공학을 공부하면서 컴퓨터 구조와 운영체제에 대해서 학습을 하고 정리를 해봤다.
이번에는 기술 면접에서 자주 나오는 질문들을 공부해보자.
복습하고 공부한 내용을 면접에서 어떻게 말할 것인지 생각해보려고 한다.
프로세스란
내가 아는 프로세스는 실행 중인 프로그램의 운영체제의 실행 단위이다.
보조기억장치(SSD, HDD)에 저장된 프로그램이 실행되면 생성된다.
프로세스는 부여받은 PCB(Process Control Block)을 갖고 CPU에 할당되는 순서가 정해지고 상태를 가지며
메모리 상에 코드, 데이터, 스택, 힙 영역을 포함하는 독립적인 메모리 공간을 할당 받는다.
이때 영역들은 연속적으로 할당되어 있지 않고 불연속적으로 할당한다.
스레드란
스레드는 위에서 이야기 하였던 프로세스의 작업 단위이다.
일반적으로 한 프로세스는 여러 개의 스레드를 가질 수 있다.
이때 멀티 스레드는 프로세스 내의 자원과 데이터를 공유하는 특징이 있다.
공유 자원을 사용할때도 TCB(Thread Control Bolck)을 사용하여 어떤 순서로 어떤 스레드가 실행 되는지 한다.
커널
운영체제의 핵심 서비스를 담당하는 부분으로써, 하드웨어를 비롯한 자원을 보호하고 프로세스에 할당한다.
여러 프로세스의 실행 순서를 제어하고 통신을 돕는 등 프로세스의 실행을 관리한다.
또한 페이징 등의 가상 메모리 기법을 통해 물리 메모리를 논리적인 단위로 관리하고, 파일 시스템을 통해 파일과 디렉터리를 관리하는 역할을 한다.
페이징 가상 메모리
페이징은 물리 메모리를 동일한 크기의 프레임으로 나누고, 프로세스의 가상 메모리를 동일한 크기의 페이지로 나누어 관리하는 기법이다.
각 페이지는 페이지 테이블을 통해 물리 메모리의 프레임과 매핑되며, 필요한 페이지만 물리 메모리에 적재하고 나머지는 보조기억장치에 저장한다.
이를 통해 물리 메모리보다 큰 프로그램도 실행할 수 있으며, 메모리의 단편화를 효율적으로 관리할 수 있다.
페이지 부재(Page Fault)가 발생하면 보조기억장치에서 필요한 페이지를 가져와 물리 메모리에 적재하는 방식으로 동작한다.
프로세스가 CPU를 활용하다가 입출력 작업을 만나면 어떻게 되는가?
- 시스템 콜을 통한 입출력 요청 실행
- 프로세스 상태가 대기 상태로 변경(다른 프로세스가 실행될 기회를 얻게 됨)
- 입출력 작업 수행
- 완료 및 준비 상태로 전환된다.
- CPU 획득 및 실행 재개
CPU 스케줄링이란 무엇인가?
운영체제가 여러 프로세스 사이에서 CPU 자원을 효율적으로 할당하고 관리하는 작업이다.
CPU 스케줄링 알고리즘을 통해 다중 프로세스 환경에서 CPU 사용을 조정하여 다양한 프로세스가 공정하게 실행되도록 하는 역할을 한다.
CPU 스케줄링 알고리즘
- CPU를 먼저 요청한 프로세스부터 CPU 할당
- 준비 큐에 삽입된 순서대로 실행되는 비선점형 스케줄링
라운드 로빈 스케줄링 (Round Robin 스케줄링)
- 선입 선처리 스케줄링 + 타임 슬라이스
- 준비 큐에 삽입된 순서로 실행하되, 타임 슬라이스(지정된 시간)만큼 실행
- 선점형 스케줄링
부팅이 무엇인가요? 부팅의 과정을 서술하세요
컴퓨터 부팅(Boot)은 컴퓨터를 시작하고 운영체제를 로드하는 과정을 의미한다.
- 전원 시작
- BIOS 시작*(하드웨어를 초기화 시키고 준비하는 역할)
- 부트 로더 시작
- 운영체제 적재
- 운영체제 초기화 및 사용자 로그인 *BIOS 대신 UEFI(Unified Extensible Firmware Interface)가 사용되는 경우도 있다.
페이징은 무엇이며, 존재 이유는 무엇인가요?
페이징은 가상 메모리 관리 기법 중 하나, 물리주소를 프레임, 논리 주소를 페이지 단위로 분리하여 메모리 관리하는 방법이다.페이징을 통해 외부 단편화 문제를 제거할 수 있고, 프로세스간 메모리 공간을 격리하게 한다.
하지만 내부 단편화 문제가 발생할 수 있다.
메모리가 크면 무엇이 좋은가요?
동시 실행 가능한 프로세스 수가 많아지기 때문에 프로그램 실행 속도, 멀티 태스킹 능력이 향상된다.
하지만 메모리 크기와 속도가 정비례하지 않는다.
시스템 콜은 무엇인가?
운영체제의 커널이 제공하는 서비스를 응용 프로그램이 사용할 수 있도록 하는 인터페이스이다.
시스템 콜이 존재하는 이유는 사용자 프로그램은 자원에 직접 접근할 수 없기 때문이다.
하드웨어를 비롯한 자원에 접근하기 위해 사용하고 프로세스간의 통신을 비롯한 프로세스 관리를 위해 시스템 콜을 호출한다.
스래싱은 무엇인가?
스래싱은 컴퓨터 시스템에서 발생하는 문제 상황으로, 지나치게 많은 페이지 폴트로 인해 대부분의 시간을 페이지 교체 작업으로 소비하게 되는 현상이다.
스래싱이 발생하면 시스템 성능이 급격하게 저하된다.
스래싱을 해결하기 위해 물리 메모리 크기를 확장하거나, 페이지 교체 알고리즘을 변경해야 한다.
동시 실행중인 프로세스의 수를 줄이거나, 프로세스 우선순위를 조정하는 방식을 선택할 수 있다.
파일 시스템의 정의와 종류를 아는 대로 설명
파일 및 디렉터리를 관리하는 커널의 한 부분입니다.
데이터를 파일과 디렉터리로 저장하고 조직화하는 역할을 담당하여 어플리케이션이 해당 데이터에 접근할 수 있도록 해야 한다.
대표적으로 USB 메모리 등에서 사용되는 FAT 파일 시스템, 윈도우에서 사용되는 NTFS, 리눅스에서 주로 사용되는 ext 파일 시스템 (ex2, ex3, ex4), macOS에서 주로 사용 되는 APFS등이 있다.
커널이 입출력 인터럽트를 처리하는 과정
- 인터럽트 발생
- 현재 상태 저장
- 인터럽트 서비스 루틴 호출
- 인터럽트 서비스 루틴 수행
- 현재 상태 복원
- 프로세스 스케줄링
명령어 병렬 처리 기법은 무엇이며 대표적인 종류에는 어떤 것인가?
프로세서의 성능을 향상시키기 위해 여러 명령어가 병렬로 처리되는 기술입니다.
즉 하나의 명령어가 실행 중에 다른 명령어와 함께 독립적으로 실행될 수 있습니다.
대표적으로 파이프라이닝, 슈퍼스칼라 등이 있습니다
RAID란 무엇인가?
RAID는 여러 개의 디스크를 하나의 논리적 디스크처럼 구성하여 성능, 용량, 안정성을 향상시키는 기술이다.
RAID 0은 데이터를 여러 디스크에 분산하여 저장하여 성능을 향상시키는 방식.
단, 디스크가 하나라도 고장나면 전체 데이터가 손실된다.
RAID 1은 데이터를 두 개의 디스크에 완전히 복제하여 안정성을 향상시키는 방식이다. 단, 디스크 용량이 절반으로 줄어듭니다.
RAID 5는 데이터와 패리티 정보를 여러 디스크에 분산하여 저장하여 성능과 안정성을 향상시키는 방식이다.. RAID 6는 RAID 5에 패리티 정보를 하나 더 추가하여 안정성을 더욱 향상시킨 방식. 디스크가 두 개까지 고장나도 데이터를 복구할 수 있다.
운영체제 관점에서 레이스 컨디션과 동기화의 관계
레이스 컨디션은 여러 프로세스 또는 스레드가 공유 자원에 동시에 접근할때 발생할 수 있는 문제이다.
동기화는 프로세스 또는 스레드가 공유자원에 접근할 때 충돌을 방지하기 위한 방법으로, 뮤텍스, 세마포어 기법으로 공유자원에 대한 동기화를 통해 레이스 컨디션을 방지할 수 있다.
파일 디스크립터란 무엇인가?
파일 디스크립터는 운영체제에서 파일을 식별하는 데 사용하는 정수 값이다.
파일을 열면 운영체제는 프로세스에 파일 디스크립터를 할당하고 프로세스는 파일 디스크립터를 사용하여 파일 입출력 대한 작업을 수행할 수 있다.
소켓이란
소켓은 컴퓨터 네트워크에서 프로세스간 데이터를 주고받기 위한 인터페이스이다.
소켓은 프로세스가 네트워크를 통해 다른 프로세스에 연결하고, 데이터를 전송하고 데이터를 수신할 수 있다.
유닉스 체계 운영체제에서 이는 파일과 같이 간주되며, UDP를 사용하는 비연결형 소켓과 TCP를 사용하는 연결형 소켓이 있다.
하드 링크와 소프트 링크의 차이를 설명
하드 링크는 동일한 innode를 공유하는 파일이다.
하드 링크는 원본 파일은 삭제하지 않는 한 항상 유효한다.
기존 파일과 하드 링크간의 연결은 모두 같은 데이터 블록을 참조하기에 하드링크를 통해 만든 데이터를 공유하며 한 파일을 수정하면 다른파일도 변경한다.
파일을 삭제하더라도 데이터 블록이 실제로 삭제되지 않고 다른 하드 링크가 여전히 데이터를 참조하면 파일은 유지된다.
소프트 링크는 다른 inode를 가진 파일이다.
소프트 링크는 원본 파일이 삭제되면 사용할 수 없다.
원본 파일의 경로가 변경되거나 삭제되더라도 소프트 링크는 무효화된다.
원본 파일의 데이터 블록을 공유하지 않습니다.
메모리 매핑이란 무엇인가?
메모리 매핑은 메모리와 보조 저장장치(하드 디스크, SSD 등) 간의 데이터 전송 및 공유를 위한 기술.
그리고 파일 메모리 매핑은 메모리 매핑을 사용하여 특정 메모리 영역에 파일을 대응시키는 과정을 의미.
이는 프로세스 간의 통신을 위해 주로 사용된다.
한 프로세스는 메모리 매핑 된 파일에 씀으로써 데이터를 공유하고, 다른 프로세스가 해당 데이터에 읽음으로써 통신이 가능하다.
시그널이란 무엇인가?
시그널은 소프트웨어 인터럽트의 일종으로, 프로세스에게 특정 이벤트가 발생했음을 알리는 수단이다.
시그널은 프로세스 간 통신, 예외 처리, 비동기 이벤트 처리, 프로세스 종료 및 다른 상황에서 사용됨.
시그널의 예시로 SIGINT (Interrupt Signal)가 있다. 흔히 Ctrl+C 키를 누를 때 발생하며, 프로세스를 종료하도록 요청합니다.
SIGKILL (Kill Signal) 또한 시그널의 예시입니다.
프로세스를 강제 종료하기 위해 사용된다. 프로세스는 이 시그널을 무시할 수 없으며, 바로 종료된다.
'Computer Science > 기타' 카테고리의 다른 글
[Computer Science] [정보처리기사] 소프트웨어 설계 & 계산 문제 해설 (1) | 2025.02.04 |
---|