본문 바로가기

CS/운영체제

[씨면기작] 운영체제란 무엇인지 아는대로 설명해주세요


 해당 글은 저의 주관이 가득 섞인 내용입니다. 특히 질문한 이유, 면접관의 의도 등은 개인적인 생각임을 밝힙니다.  


(0) 시간이 없어서 죄송해요 전체 글을 못읽겠어요. 빠르게 원하는 것만 가져갈게요!

응용 프로그램과 하드웨어 사이에서 인터페이스 역할을 하고 시스템의 동작을 제어하는 시스템 소프트웨어 입니다. 그중 운영체제는 프로세스를 제어하는 역할을 합니다. 즉, 프로세스를 관리합니다. 현재 CPU와 같은 자원을 선점하는 순서를 정리하는 스케줄링 그리고 프로세스간 공유 자원 접근을 제어하는 프로세스의 상태 관리와 자원할당을 관리합니다.

- 저장장치 관리입니다.(Storage Management) 입니다. 프로세스에게 할당한 메모리 영역의 할당과 해제, 침범방지 메인 메모리를 효율적으로 활용하기 위한 기능을 담당합니다.

- 네트워크 관리입니다.(Network Management) 입니다. 응용 프로그램이 네트워크를 사용하기 위해 네트워크 프로토콜을 지원합니다.


(1) 질문한 이유가 뭐예요? 

개인적으로 해당 질문은 만약 프로그램과 프로세스의 차이에서 넘어와서 질문이 들어온 상태라면? 우리는 프로세스란 운영체제의 제어를 받고있는 프로그램이라는 답변을 내놓았습니다. 우리는 운영체제의 제어가 무엇을 의미하는지 정확하게 설명할 필요가 있습니다.

하지만, 해당 질문없이 운영체제에 대해서 아는 것을 설명해주세요라는 질문을 했다면? 우리는 자신있는 내용을 설명해야합니다. 면접관이 우리의 편의를 봐줬다고 생각할 수 있습니다. 왜냐하면, 과연 이 면접자는 운영체제에 대해서 어떤 부분을 정확하게 알고 있을까? 라는 생각을 갖고 있을 것입니다. 면접관이 궁금한 내용을 물어볼 수 있지만, 면접자가 준비한 내용을 잘 설명할 수 있을까? 라는 생각이 더 지배적일 것입니다. 그래서 면접관은  "운영체제에 대해서 아는 것을 설명해주세요. 대신 정말 자신있는 것을 골라주세요"라는 생각으로 질문했다고 생각해도 괜찮습니다. 하지만 그렇지 않다면? 우리는 모든 부분을 공부해야 함이 분명하겠죠?

왜냐하면, 취업하고 이직해서 돈을 벌어야하기 때문입니다. 

그래서 위 두 단락을 보자면, 운영체제는 프로세스를 제어 하고 있다는 기본 전제로 대화를 풀어나가면 됩니다. 실제로 운영체제는 매우 다양한 역할을 합니다. 하지만 우리는 프로세스의 제어를 기본 전제로 면접을 이어나갈 것입니다. 아래 세가지에 관해서 대답을 해봅시다.

📌첫번째, 프로세스의 상태 관리 입니다. 구글에 프로세스 상태라고 검색을 하면 대학시절 한번쯤 운영체제 강의에서 교수님이 강조하신 그림이 등장할 것입니다. 해당 글에서는 나중에 이미지를 추가하겠습니다. 프로세스는 생성, 준비, 실행, 일시 정지, 중단, 종료 등 여러 상태를 가질 수 있습니다. 운영체제는 이러한 상태에 따라서 프로세스의 상태를 관리하고 적절한 변화를 시켜줍니다. 모든것은 운영체제의 제어에 따릅니다.

그렇다면, 이러한 상태 변경은 무작위로 진행될까요? 아닙니다. 운영체제는 프로세스의 스케쥴을 알고 있습니다.

📌두번째, 스케줄링(Scheduling)입니다. 운영 체제는 다중 프로세스 환경에서 CPU 자원을 여러 프로세스에게 공평하게 할당하기 위해 스케줄링 알고리즘을 사용합니다. 해당 알고리즘들은 다양하고 많습니다. 하지만 대중적으로 사용되는 알고리즘이 있습니다. Linux, Unix, Windows에서 사용하는 알고리즘이 무엇인지 한번 찾아보세요. 조금 더 깊은 지식이 쌓일 것입니다. 이를 통해서 프로세스들이 CPU를 공유하며 동시에 실행됩니다.

그렇다면, CPU란 무엇일까요? 여기에서 깊은 얘기를 하진 않겠습니다. 하지만, 우리는 CPU를 하나의 자원으로 생각하면 됩니다. 그런데, 여러 프로세스가 동시에 하나의 자원에 접근하면 무엇이 발생할까요? 쉽게 풀이해서 맞짱신청이라고 생각하면 됩니다. 프로세스는 문명 또는 지적 생명체가 아니라 대화로 풀지않고 먼저 뻗은 사람이 임자입니다. 그래서 스케줄링이 필요합니다. 그리고 운영체제의 제어가 필요한 것입니다. 그래서 운영체제는

📌세번째, 자원 할당도 합니다. 프로세스는 CPU, 메모리, 입출력 장치 등의 시스템 자원을 사용합니다. 운영체제는 이러한 자원을 효율적으로 관리합니다. 그래서 프로세스가 필요한 자원을 할당하고 자원의 충돌 즉, 맞짱을 방지합니다. 


더욱 많은 운영체제의 역할이 많습니다. 하지만 제가 생각하기에 답변하기 좋은 내용들은 위 세가지라고 생각합니다. 세가지를 한 번에 합쳐서 답변을 해도 좋습니다.

왜냐하면, 프로세스의 상태 변화에서는 컨텍스트 스위칭, 기아상태, 데드락, 경쟁상태, 동기화 등등 여러가지를 답변할 수 있는 내용들이 많이 존재합니다. 스케줄링은 운영체제가 어떻게 프로세스의 스케줄을 결정하는지 파악할 수 있고, 시분할 등 여러가지 답변을 할 수 있습니다. 자원할당은 위의 상태변화에서 동시에 이루어지는 내용이기 때문에 이상 말을 아끼겠습니다.

글의 내용이 길어지면서 두서가 없어졌습니다. 추후에 다시 깔끔하게 정리해보겠습니다.


(2) 해당 질문을 한 면접관의 의도는 무엇일까요?

우리가 답변하기 자신있는 부분을 답변해주길 바라는 의도였다고 생각합니다. 어떠한 질문없이 운영체제에 대해서 물어보셨다면 말이죠. 그래서 면접관이 질문하기 쉽게 우리는 우리가 정확히 알고 있는 내용을 던질 필요가 있습니다.

여기서는 프로세스의 제어에 관해서 설명을 했지만, 메모리 관련해서 얘기를 해도 좋습니다. 그 과정은 추후에 정리를 해서 블로그에 작성하겠습니다. 지금도 알고 있지만, 혹여나 틀린 정보가 되어 이 글을 읽고 잘못된 지식을 얻어 갈 수 있기 때문입니다. 하지만 더욱 중요한것은 이 글도 완벽히 정확한 글이 아닐 수 있습니다. 그렇기 때문에 항상 경계해주세요. 틀린 내용이 있다면 답글에 작성해주세요.

여기에서 우리는 운영체제에서 여기 부분은 좀 알고 있습니다. 라고 밝혔습니다. 이 후에는 독립적인 내용으로 글을 작성합니다. 다른 주제로 글을 작성할 것이라는 말을 조금 멋지게 작성했습니다. 다음 주제는 정리해서 작성해보도록 하겠습니다.

다음 씨면기작은 🔜다른 독립적인 컨텐츠 입니다.