이번 글에서는 소프트웨어 엔지니어로서 컴퓨터와 운영체제에 대한 간략한 정리를 해보려고 합니다. 특히 요즘 국내에는 다른 업계에서 일하시던 분들도 소프트웨어 엔지니어로서 전직을 하기도 하고 컴퓨터 과학 전공이 아니라더라도 교육 기관들을 통해서 소프트웨어 엔지니어라는 직업에 발을 들이는 것 같습니다. 저 역시 위와 같이 이 업계에 발을 들이는 분들을 많이 접할 수 있었습니다. 이제 막 소프트웨어 엔지니어로서 도전하시는 분들에게 조금은 도움이 되었으면 하는 마음에서 가장 기본적인 컴퓨터 시스템과 운영체제의 기본적인 구조를 소개해보려고 합니다.
컴퓨터 시스템의 구조
컴퓨터 시스템은 크게 3가지 구성요소로 구분할 수 있습니다.
hardware
- CPU, Memory, I/O Device와 같은 것들을 말합니다.
- 시스템의 가장 기본적인 컴퓨팅 리소스를 제공합니다.
operating system
- 운영체제는 컴퓨터 시스템의 동작에 있어 자원들을 적절하게 사용할 수 있는 방법을 제공합니다.
- 간단하게 생각하면 운영체제 그 자체를 어떠한 작업을 한다기보다 프로그램들이 유용한 작업을 할 수 있도록 환경을 제공해 준다고 보면 됩니다.
application programs
- 실제 사용자들이 사용하는 Processors, Spreadsheets, Compilers, Web browsers와 같은 것들을 말합니다.
- 사용자의 컴퓨팅 문제를 해결하기 위한 방법을 제공합니다.
운영체제의 기본적인 구조
조금이라도 쉽게 설명하기 위해 사용자 관점에서의 운영체제와 컴퓨터 시스템 관점에서의 운영체제를 나누어 정리해 보도록 하겠습니다.
사용자 관점에서의 운영체제
- 사용자의 입장에서 봤을 때, 운영 체제는 성능과 보안에 약간의 주의를 기울이고 리소스 활용 (다양한 하드웨어 및 소프트웨어 리소스가 공유되는 방식)에는 전혀 신경을 쓰지 않고 주로 사용하기 쉽게 설계되었습니다.
- 일부 컴퓨터에는 사용자보기가 거의 또는 전혀 없습니다. 예를 들어, 가정용 기기 및 자동차에 내장된 컴퓨터에는 숫자 키패드가 있을 수 있으며 상태를 표시하기 위해 표시등을 켜거나 끌 수 있지만 이들 컴퓨터와 해당 운영 체제 및 응용 프로그램은 주로 사용자 개입 없이 실행되도록 설계되었습니다.
컴퓨터 시스템 관점에서의 운영체제
- 컴퓨터의 관점에서 보면 운영 체제는 하드웨어와 가장 밀접하게 관련된 프로그램입니다.
- 컴퓨터 시스템에는 CPU 시간, 메모리 공간, 저장 공간, I/O 장치 등 문제를 해결하는 데 필요할 수 있는 많은 리소스가 있는데 이러한 리소스를 할당해 주는 역할을 합니다.
- 운영 체제는 제어 프로그램으로서 컴퓨터의 오류 및 부적절한 사용을 방지하기 위해 사용자 프로그램의 실행을 관리합니다.
운영체제에 대한 간략한 정리
- 코드 브레이킹 및 궤적 플로팅과 같은 군에서 사용할 목적 및 정부에서 사용하기 위한 용도로 시작되었습니다.
- 1960년대 무어의 법칙은 집적 회로의 트랜지스터 수가 18 개월마다 두 배가 될 것이라고 예측했으며 사실이 되었고, 이는 방대한 용도와 방대한 수의 다양한 운영 체제로 이어질 수 있었습니다.
- 일반적으로 운영 체제에 대한 완전히 적절한 정의는 없지만, 기본 목표는 프로그램을 실행하고 사용자 문제를 보다 쉽게 해결하는 것에 있습니다.
- 요약하자면, 우리의 목적을 위해 운영 체제에는 항상 실행되는 커널, 애플리케이션 개발을 용이하게 하고 기능을 제공하는 미들웨어 프레임 워크, 시스템이 실행되는 동안 시스템을 관리하는 데 도움이 되는 시스템 프로그램이 포함될 수 있습니다.
왜 운영체제를 알아야 할까?
프로그래밍과 관련된 일을 하는 개발자들은 많지만 그들 중 극히 일부만이 운영 체제의 생성 또는 수정에 관여한다고 생각합니다. 그러한 이유에서 가끔은 운영체제에 대한 지식을 이해하는데 불필요함을 느끼는 분들도 많은 것 같습니다. 하지만 거의 모든 코드가 운영 체제 위에서 실행되기 때문에 운영 체제의 작동 방식에 대한 지식은 적절하고, 효율적이며, 효과적이며, 안전한, 프로그래밍에 매우 중요하다고 생각합니다. 이러한 이유에서 운영 체제의 기본 사항, 컴퓨터 하드웨어를 구동하는 방법 및 응용 프로그램에 제공하는 내용을 이해하는 것은 이를 프로그래밍하는 사람에게 필수적 일뿐만 아니라 프로그램을 작성하고 사용하는 사람에게도 매우 유용하다고 생각합니다.
'IT > 개발지식' 카테고리의 다른 글
JWT(JSON Web Token)란? (0) | 2023.02.07 |
---|---|
객체지향 프로그래밍이란? (0) | 2023.02.06 |
쿠키 (Cookie), 세션 (Session) 그리고 Redis (0) | 2023.02.05 |
HTTP vs 웹소켓 (WebSocket) (0) | 2023.02.04 |
라이브러리와 프레임워크의 차이 (0) | 2023.01.21 |
댓글0