최근에 기회가 되어 웹개발 동아리의 면접관으로 들어가게 됐습니다. 저도 부족하지만 최대한 집단에 기여할 수 있고 성장 가능성이 높은 분들을 찾기 위해 노력했던 것 같습니다.
면접 과정에서 좋은 평가를 줬던 면접자들은 대게 본인이 공부한 내용을 남에게도 설명할 수 있었습니다.
공부를 위한 공부, 학점을 위한 공부라기보다, 지식으로 본인에게 정립된 느낌?
반면 '나 밤새면서 열심히 했다' 만을 주장하는 분들에겐 좋은 점수를 주지 못했습니다. 그렇게 열심히 공부했지만 명확히 설명을 할 수 없다는 점이 제가 느끼기에는 공부에서 방향성이 잘못됐다고 느꼈습니다.
(물론 떨려서 순간 대답을 못하셨을 수도 있습니다.)
저도 후자같은 지원자가 되고 싶지 않아 제가 배운 운영체제를 제 나름으로 정의해보려 합니다.
그래서 운영체제가 뭔데? 너 컴공이잖아. 라고 누군가가 나에게 물어본다면 뭐라고 대답할까에 대한 정리
사전적 정의 : 운영체제란 응용프로그램 또는 사용자가 컴퓨터 하드웨어를 편리하고 효율적으로 사용하게 하기 위하여 시스템 자원(메모리, 프로세서 등)을 관리하고 여러가지 프로그램이 필요로 하는 공통적인 서비스를 제공하는 소프트웨어이다.
내가 느낀 운영체제 : 컴퓨터 여러 자원(하드웨어, 메모리, 프로세서, 입출력 장치 등)들이 충돌하지 않고 수행될 수 있도록 도와주는 프로그램.
운영체제에는 정답이 없다 -> 다양한 목적의 디바이스가 존재하는 만큼 거기에 어울리는 운영체제 설계 필요함
OS가 하는 일 : 프로세스 제어, 메모리 제어, 주변 디바이스 관리, 시스템 콜 수행 등
커널 - 운영체제의 가장 하부에서 하드웨어를 직접적으로 관리하는 프로그램 (중요, 핵심)
(안드로이드도 리눅스 커널을 쓰기 때문에 리눅스 기반이라고 불림 -> 이정도로 운영체제에선 커널이 핵심)
운영체제와 프로세서 : 프로세서 스케줄링, 멀티 쓰레딩, 동기화
운영체제 메모리 관리 핵심 : 프로그램을 메모리 어디에 적재 시킬지, 빈 공간을 어떻게 관리할 지, 빈 공간이 없으면 무엇을 교체할지?, 가상 메모리와 실제 메모리의 매핑 효율성
운영체제 파일 관리 핵심 : 파일 저장 및 찾기, 파일 관리 시스템, 속도와 공간 효율성 사이의 절충
운영체제 디바이스 관리 핵심 : 입출력 장치와 CPU의 분리, 디바이스 컨트롤러, OS의 공통 I/O Software, 버퍼를 이용한 속도차 완화
운영체제에서 데드록 : 데드록의 정의와 예방, 복구
운영체제의 멀티 프로세싱 : 다중 프로세서에 프로세스 할당, 프로세서 캐시 간 동기화
이 외에도 세마포어, 스케줄링 알고리즘, i-node 등을 배웠지만 결국 이들의 목적이 위 시스템을 구현하기 위한 도구임으로 디테일한 설명은 생략하겠습니다.