이 포스팅에서 다루는 내용
운영체제의 개념, 커널 모드, 유저 모드, 추상화
들어가며...
우리가 잘 아는 윈도우, 맥 OS, 리눅스 등이 모두 운영체제이다.
운영체제가 설치되지 않은 컴퓨터를 사용하려면 굉장히 굉장히 어려울 것이다.
왜? 운영체제가 하는 일이 뭐길래?
운영체제는 컴퓨터 상에서 우리가 쓰는 웹브라우저, 워드, 카카오톡 등의 응용 프로그램과
그것을 작동시키는 프로세서, 메모리, 모니터, 키보드 등의 물리적 하드웨어 사이에서
우리가 그것들을 쉽게 사용할 수 있도록 중간자 역할을 한다고 생각할 수 있다!
운영체제가 없으면 우리는 컴퓨터 자원을 직접 다루면서 사용해야 해야 하는데 그건 불가능에 가깝다.
컴퓨터구조가 발전하고 복잡해짐에따라 컴퓨터 자원들을 효율적으로 또 편리하게 다루기 위해서 자연스레 운영체제의 필요성이 드러날 수 밖에 없었다.
운영체제?
컴퓨터는 복잡한 시스템을 이루고 있다.
현대 컴퓨터의 물리적 구성
- 하나 이상의 프로세서
- 메인 메모리
- 보조기억장치
- 입출력 장치 등...
이러한 자원들을 관리하고 활용하는 것을 돕는 소프트웨어가 바로 운영체제
컴퓨터는 하드웨어와 소프트웨어로 구성되고,
운영체제는 이 소프트웨어 중 가장 기본적인 소프트웨어이다. (하드웨어와 가장 가깝다!)
커널 모드와 유저 모드
일반적으로 소프트웨어는 커널 모드와 유저 모드의 이중 실행 모드를 가진다.
운영체제는 커널 모드에서 실행되고, 우리가 일반적으로 사용하는 웹브라우저, 뮤직플레이어 등의 프로그램은 유저 모드에서 실행된다.
커널 모드는 하드웨어를 완전히 다룰 수 있다 - 운영체제는 하드웨어를 잘 다루기 위한 소프트웨어
->> 운영체제는 커널 모드에서 실행하는 소프트웨어다!
- kernel mode(supervisor mode): 모든 하드웨어에 대한 완전한 접근이 가능. 어떤 기계 명령도 실행 가능.
- user mode: 기계 명령 중 일부만 실행 가능.
유저 모드에서 실행 중인 프로그램이 커널 모드에서만 가능한 기계 명령을 수행하려면 어떻게 해야 할까?
-> 시스템 콜을 통해 커널 모드로 전환 한 뒤에 운영체제가 명령을 처리 --- 뒤에서 자세히 다룬다
운영체제의 기능
- 추상화
- 자원 관리
운영체제는 이 두 가지 기능을 제공한다.
추상화란 지저분한 하드웨어를 직접 다루게 하지 않고 단순하고 깨끗한 형태로 자원을 다룰 수 있게 하는 것이다.
자세한 내용은 ⬇️
추상화 - 확장된 기계로서의 운영체제
추상화는 복잡한 컴퓨터를 다루는 데에 있어서 핵심이다. 컴퓨터구조에서도 중요한 추상화 개념
하드웨어는 기계어 수준으로 다루어야 한다(복잡). 이는 굉장히 원시적이고 프로그래밍을 하기 힘들다. 특히 입출력은 더더욱..
예를 들어, 플로피 디스크에서 데이터를 읽기 위해서는
- 읽을 디스크 블록 주소, 트랙당 섹터 개수, 섹터 간격 등을 인자로 지정해 주고
- 디스크 암을 움직이고, 읽고 쓰고
- 모터가 작동 중인지 체크하고, 시작 지연 시간을 감수할 것인지....
- 뿐만 아니라 플로피 디스크의 더 깊숙한 구조를 고려하여 체크하고...
- 더 복잡하고 세세한 내용들이 포함된다🤮
이것들을 기계어 수준의 명령어로 실행해야 한다!!
심지어 하드웨어마다 이 과정들은 다 다르다(당연하게도) - 하드웨어별로 다 따로 작성해야 함
운영체제는 이러한 코드들을 프로그래머가 직접 작성하지 않게 도운다.
우리는 단순히 read 명령만 내리면 끝이다..!
모터의 상태가 어쩌구 저쩌구 주파수 변조 어쩌구는 더 이상 우리의 알빠가 아니다-🥳
못생긴 하드웨어 인터페이스가🤮 -> 운영체제를 통해 -> 보기 좋은 인터페이스가🥳 되었다
추상화의 대표적인 예는 바로 'file'이다. 뒤에서 자세하게 ~
자원 관리자로서의 운영체제
과거의 컴퓨터는 하나의 프로그램만을 실행했다.
그러나 요즘에는 웹 브라우저를 이용하는 동시에 카톡도 하고, 메모장도 사용하는 등 동시에 여러 개의 프로그램을 실행시킨다.
프로그램을 실행시킨다는 것은 프로세서, 메모리 등의 하드웨어 자원을 사용한다는 것인데 ...
자원은 한정적이다!
그런데 이것을 여러 프로그램 혹은 사용자들이 사용하고자 한다면 여러 문제가 발생할 수 있다.
누군가 자원을 독점하거나, 동시에 자원을 사용하고자 할 때 등등.
따라서 이러한 상황을 관리할 필요성이 생기게 되었고, 이 일을 운영체제가 맡음으로써 -자원 관리자로서의 역할- 운영체제의 개념이 더욱 뚜렷해졌다.
- 동시에 여러 프로그램이 실행될 수 있도록 하기 위해
- 프로그램별 메모리, I/O 장치, 다른 자원들을 관리하고 보호하기 위해
운영체제는 자원을 관리해야 한다.
이를 위해 운영체제가 결국 해야 하는 것은
어떤 프로그램이 어떤 자원을 사용하고 있는지 확인하고,
자원에 대한 요청을 받아들이고 자원 사용에 대한 관리를 하고,
서로 다른 프로그램과 사용자들로부터 오는 요청들의 충돌을 중재해야 한다.
자원 공유; multiplexing
여러 프로그램들이 같은 자원을 공유하게 되는데, 두 가지 공유 방법이 있다.
- In time
- In space
한 줄 정리
운영체제는 커널 모드에서 실행되며 추상화와 자원 관리를 제공하는 소프트웨어다
틀린 내용이 있다면 댓글 부탁드립니다 :)
'Computer Science > Operating System' 카테고리의 다른 글
[운영체제] 운영체제의 여러 종류 | Batch, Multi-programming, Time-Sharing, Distributed, Real Time OS 등 (5) | 2023.09.06 |
---|---|
[운영체제] 커널과 디바이스 드라이버란 무엇일까 (1) | 2023.08.28 |
[운영체제] 운영체제의 구성요소 What are the parts of an OS? (0) | 2023.08.27 |
[운영체제] 운영체제의 역사 (feat. 컴퓨터의 역사) (0) | 2023.07.15 |
[운영체제] (0) | 2023.07.08 |