운영체제 강의를 들은지 너무 오래되어서 개념이 너무 흐릿하다. 그래서 인프런의 공룡책 강의를 들으면서 중요하다고 판단되는 부분을 정리해보고자 한다.
잘못된 부분이 있으면 언제든지 댓글로 지적 부탁드립니다.
운영체제란
- 컴퓨터 시스템을 운영하는 소프트웨어
- 컴퓨터에서 계속 돌아가는 프로그램
- 어플리케이션 프로그램에게 시스템 서비스를 제공하기 위함
- 프로세스 , 자원, 유저 인터페이스 등을 제공하는 역할
- 컴퓨터의 하드웨어를 관리하는 소프트웨어
간단히 말해서, 컴퓨터에서 유저가 편리하게 하드웨어 위에서 Application Program을 이용할 수 있도록 하드웨어 위에서 얹혀진 프로그램이라고 생각하면 된다.
운영체제 구조
1. 폰노이만 구조
먼저 운영체제 구조를 알아보기 전에, 컴퓨터의 토대를 이루고 있는 폰노이만 구조에 대해서 알아보자.
여담이지만, 폰노이만 구조는 사람의 두뇌 동작방식에서 영감을 얻었다고 한다. 여러 기억(Memory)을 저장하고 ,저장된 기억을 토대로 생각(연산)을 하는 방식에서 영감을 받았다고...
왜 등장했는가
- 폰노이만 구조 전에는, 컴퓨터 프로그램이 컴퓨터에 내장되어 있지 않아서 간단한 덧셈, 뺄셈 연산을 할 때에도 하드웨어 전선을 직접 조작해야 했다.
- 폰노이만 구조 등장 후에는 프로그램과 데이터가 메모리 영역에 내장되기 때문에, 연산을 하기 위해서 메모리에 있는 프로그램과 데이터를 버스(Bus)를 통해서 전달하여 연산을 할 수 있게 되었다.
핵심 개념
CPU
- 제어장치 (Control Unit)
- 입출력 장치간 통신 및 조율을 제어
- 명령어를 읽고 해석하여 데이터 처리를 위한 시퀀스 결정
- 산술 논리 장치 (Arithmetic Logic Unit)
- 덧셈, 뺄셈같은 두 숫자의 산술연산과 베타적 논리합, 논리곱 같은 논리 연산을 계산하는 디지털 회로
메모리
- 명령어 레지스터
- 프로그램 명령어 (Instruction Set) 이 저장된다.
- 명령어 레지스터를 통해, 프로그램 코드를 해석하여 데이터 레지스터에서 필요한 데이터를 가져온다.
- 데이터 레지스터
Bus
- 메모리 영역의 프로그램과 데이터를 CPU로 전달해주는 역할을 한다.
- CPU가 메모리 영역 -> 버스 로부터 프로그램을 전달 받고, 실행하는과정은 아래와 같다.
-
fetch
: CPU가 메모리에 저장된 명령어를 받아와 계산할 때 메모리로부터 명령어를 가져온다.
-
decode
: 가져온 명령어를 해석한다.
-
execute
: 해석한 결과를 실행한다.
-
store
: 결과를 저장한다.
2. 멀티 프로그래밍
- 메모리에 하나의 프로그램만 넣지 않고 동시에 여러개의 프로그램을 넣어서 여러 프로그램을 동시에 실행시키는 것
- 메모리에
여러 프로세스를 동시에 실행
시킴으로써 CPU 사용효율이 올라간다.
- 예를들어, 유튜브 동영상을 보면서 코딩을 할 수 있는 것.
- 하나의 CPU에서는 여러가지의 task를 받아와서 처리하는데, 이 때 CPU가 시분할(Time-sharing)을 통해서 여러개의 task를 효율적으로 처리한다. 이에 따라 사용자 입장에서는
동시에
실행된다고 느껴진다.
- CPU 스케쥴링 : 어떤 프로세스를 다음에 실행해야 효율이 올라가는가 ? 를 정하는 것
3. 운영(Operation)의 두가지 모드
- User Process
- 운영체제가 CPU를 유저모드로 전환시키는 경우는, 유저 프로그램이 실행 중일 때 이다. 이 때, 유저 프로그램이 직접적으로 하드웨어에 연결됨을 막기 위해서이다.
- User 모드 중에 커널에 system call을 호출 하면 커널이 필요한 작업을 실행해주고, 다시 유저모드로 돌아온다. 이 역시 User Process에서 직접적으로 하드웨어와의 연결을 방지하기 위함이다.
- Kernel
- 운영체제의 핵심 부분으로, 시스템 자원을 관리하는 역할을 한다.
- 어플리케이션과 하드웨어를 연결시켜주는 다리 역할을 한다.
- 운영체제가 CPU를 커널모드로 전환시키는 경우는, 커널을 실행될 때이다. 이 때, 커널이 특정 운영을 실행시킬 수 있게 하기 위해서이다.
4. 운영체제의 구조
커널의 역할 - 운영체제 서비스 제공
- 유저 인터페이스 (UI)
- 프로그램 실행
- I/O oeration
- 파일 시스템 조작
- 커뮤니케션
- 에러 디텍션 (탐지)
- 자원 할당
- 로깅
- 보안
System Call
- CLI, GUI 가 사용자가 운영체제와 소통(Interface) 하는 방식이라면, System Call 은 응용프로그램 (Application) 이 운영체제와 소통하기 위한 방법이다.
- 위에서 설명된 User Mode에서 System Call을 호출하는 것을 통해 알 수 있다.
참고 / 이미지 출처