그림으로 쉽게 배우는 운영체제 - 인프런 | 강의
이 강의를 통해 모든 개발자들이 필수로 알아야하는 운영체제의 원리를 알 수 있습니다., - 강의 소개 | 인프런...
www.inflearn.com
본 포스팅은 위 링크의 강의를 요약/정리한 것으로, 지식의 공유보다는 개인적으로 공부하고 복습하기 위해 기록한 것입니다.
개요
개인용 컴퓨터 - 윈도우즈, 맥
서버 - 유닉스, 리눅스
모바일 - 안드로이드 ios
내비게이션, 스마트워치, 세탁기 - 임베디드 운영체제
컴퓨터는 운영체제가 있어야 동작하는가? - 없어도 동작한다. 그러나 처음 설계한 그대로만 동작할 뿐 다른 기능을 추가할 수 없다.
운영체제가 하는 일
프로세스 관리, 메모리 관리, 하드웨어 관리, 파일 시스템
운영체제의 역사
1940년대
🔗1943년부터 미군 지휘 하에 펜실베니아 대학교에서 에니악 개발. 최초 목적은 미사일 탄도 계산. 종이에 먼저 작업해서 테스트한 후 종이를 보고 스위치와 배선 연결하는 방식. 기간은 몇 주씩 소요되며 인력도 많이 필요함
1950년대 초반
🔗진공관과 전선으로 만든 논리회로를 아주 작게 만든 직접회로 개발. 현대적인 컴퓨터의 모습
🔗CPU와 메모리는 있었으나 키보드와 모니터는 없음. 카드에 구멍을 뚫어 프로그래밍(펀치카드)하면 컴퓨터가 이를 읽어 계산
1950년대 중후반
🔗컴퓨터의 처리 속도는 빨라졌는데 오퍼레이터가 카드를 넣고 전달하는 과정은 여전히 느림(오퍼레이터의 오버헤드) -> 펀치카드 여러 개를 한 번에 컴퓨터에 전달하면 컴퓨터는 여러 개의 프로그램을 순서대로 실행하고 한 번에 결과를 확인(싱글스트림 배치시스템) -> 매 작업마다 일일이 오퍼레이터가 결과를 꺼내고 다시 다른 프로그램을 실행하는 비효율적인 과정이 없어짐 -> CPU 사용률 증가
🔗컴퓨터 시스템 개발자는 CPU의 사용성을 높이기 위해 고민 -> 입출력 중에 CPU를 못 사용하는 문제를 해결하기 위해 입출력을 담당하는 I/O 디바이스 컨트롤러를 만들어 입출력 중에도 CPU가 돌아가도록 만듬(I/O 디바이스 컨트롤러가 입출력 작업이 끝나면 CPU에 인터럽트 신호를 주고 인터럽트를 받은 CPU는 연산 처리) -> 그러나 여전히 입력을 기다리는 동안 CPU가 노는 문제는 남아 있음(싱글스트림 배치시스템의 한계)
1960년도
🔗메모리에 여러 프로그램을 올려놓고 시간을 나눠서 빠르게 번갈아가며 실행함으로써(시분할 시스템) 싱글스트림 배치시스템의 한계 극복 -> CPU 사용률 증가 -> 프로그램을 여러 개 실행할 수 있게 되면서 한 컴퓨터를 여러 사용자가 동시에 사용할 수 있게 됨 -> 여러 사용자가 여러 개의 터미널이라는 단말기를 이용해 컴퓨터에 접속해서 사용 -> 컴퓨터를 혼자 쓰는 듯한 효과로 인해 개인적인 문서나 개인정보를 저장하기 시작 -> 파일 시스템 등장.
🔗AT&T 벨 연구소에서 개발한 유닉스는 여러 프로그램을 동시에 실행하는 멀티 프로그래밍과 여러 사용자를 지원하는 다중 사용자 시스템, 파일 시스템을 구현한 운영체제였다.
🔗메모리에 여러 프로그램을 올려놓고 동시에 실행하면서 메모리 침범 문제와 프로그램의 시작 위치를 알 수 없게 되는 문제가 생김 -> 이를 해결하기 위해 하드웨어에 베이스 레지스터(베이스 주소를 저장하는 레지스터)를 추가해서 프로그램의 시작 주소를 저장하고 모든 프로그램은 0번지에서 실행한다고 가정
🔗CPU의 사용률과 효율성을 높이면서 생기는 문제를 해결하는 과정에서 점차 하나의 학문으로 자리잡음
1970년대 이후
🔗개인용 컴퓨터의 시대가 시작. 애플의 매킨도시와 마이크로소프트의 MS 도스가 많이 사용. 특히 매킨도시는 GUI를 도입해서 인기를 얻음.
요약
🔗CPU 사용률을 높이고 비용을 절감하려는 노력이 운영체제의 발전을 이끌었다
운영체제의 구조
커널
🔗운영체제의 핵심
🔗프로세스와 메모리, 저장장치를 관리하는 핵심적인 기능을 담당한다
🔗사용자는 인터페이스를 통해서만 운영체제의 커널에 접근할 수 있다
🔗사용자로부터 자신을 보호하기 위해 시스템 콜이라는 인터페이스를 갖고 있다
🔗어플리케이션은 시스템 콜을 통해 커널에 접근한다
🔗시스템 콜 없이 하드웨어에 직접 접근하면 사용자나 어플리케이션이 저장한 데이터를 다른 어플리케이션이 덮어 쓸 수 있으며 중요한 데이터를 덮어 쓸 수도 있다 -> 커널에서 제공하는 시스템 콜 중 하나인 write 함수를 사용하면 운영체제가 알아서 하드디스크의 빈공간에 데이터를 저장한다
인터페이스
🔗인터페이스는 GUI(그래픽 유저 인터페이스)와 CLI(커맨드 라인 인터페이스)로 나눌 수 있다
🔗GUI에서는 더블 클릭으로 디렉토리를 이동하며 CLI에서는 텍스트로 명령을 입력해서 이동한다
드라이버
🔗하드웨어와 커널 간에 사용하는 인터페이스
🔗운영체제는 수많은 하드웨어를 지원해야 하기 때문에 커널이 각각의 하드웨어에 맞는 프로그램을 전부 갖고 있기는 힘들다. 따라서 하드웨어를 제작한 제조사에서 드라이버를 만들어 제공한다.
🔗키보드나 마우스 같은 간단한 장치는 커널에 포함돼 있어 컴퓨터에 꽂으면 바로 동작하지만 그래픽카드나 타블렛 같은 복잡한 장치는 디바이스 드라이버를 설치해서 사용해야 한다.
컴퓨터 하드웨어와 구조
폰 노이만 구조
🔗오늘날 대부분의 컴퓨터에서 쓰임
🔗프로그램 내장 방식
- 예전에는 하드웨어로 프로그램을 만들었기 때문에 프로그램을 바꿀 때마다 매번 스위치와 배선을 다시 조정해야 했다. 이를 해결한 것이 프로그램 내장 방식이다
- CPU와 메모리를 두고 이들 사이를 버스로 연결
- 프로그램을 메모리에 내장. 배선을 바꾸는 대신 소프트웨어만 변경
컴퓨터 하드웨어
🔗메인보드
- 다른 하드웨어를 연결하는 장치
- 장치 간 데이터 전송은 메인보드의 버스가 담당
🔗CPU 구조
- CPU(Central Processing Unit), 중앙처리장치
- 산술논리 연산장치, 제어 장치, 레지스터로 나뉨
- 산술논리 연산장치: 데이터 연산을 담당
- 제어 장치: 모든 장치의 동작을 지시하고 제어
- 레지스터: 계산을 위한 데이터를 임시로 보관하는 장치
🔗메모리 종류
- RAM(Random Access Memory)
- 메인 메모리
- 랜덤으로 데이터를 읽어도 저장된 위치와 상관 없이 읽는 속도가 같다
- 전력이 끊기면 데이터를 잃어버린다
- ROM(Read Only Memory)
- 전력이 끊겨도 데이터를 보관할 수 있지만 한 번 작성한 데이터는 수정할 수 없다
- 부팅과 관련된 바이오스를 저장하는 데에 주로 쓰인다
부팅 과정
- ROM에 저장된 바이오스 실행
- 바이오스가 주요 하드웨어에 이상이 없는지 체크(이상이 있다면 부팅X)
- 하드디스크의 마스터부트 레코드에서 부트로더를 메로리로 가져와서 실행
- 마스터부트 레코드: 하드디스크의 맨 앞에 기록되어 있는 시스템 기동용 영역
- 운영체제를 메모리로 불러옴
- 설치된 운영체제가 여러 개라면 운영체제 선택 후 메모리에 불러옴
- 부팅 완료
- 이후 실행되는 모든 응용프로그램은 메모리에 올라와서 운영체제가 관리한다
인터럽트
폴링
🔗절차
- CPU는 입출력 작업이 들어오면 입출력 관리자에게 입출력 명령을 내린다
- 입출력 명령이 완료될 때까지 CPU가 주기적으로 확인한다
🔗효율성이 떨어짐
인터럽트
🔗CPU가 하던 일을 중단하고 새로 들어온 요청을 처리하도록 한 기능
🔗절차
- CPU가 입출력 관리자에 입출력 명령을 내리고 하던 작업을 계속한다
- 입출력 관리자가 입출력을 완료하면 CPU에 신호를 준다
- CPU는 인터럽트 서비스 루틴을 실행해서 작업을 완료한다
- 인터럽트 서비스 루틴: 특정 인터럽트가 들어오면 그 인터럽트를 처리하는 함수
- 이후 CPU는 요청이 들어오기 전 하던 작업으로 복귀한다
🔗비동기적으로 동작하기 때문에 성능에 이점이 있다
🔗하드웨어 인터럽트
- 하드웨어 입출력 장치에 의해 일어나는 인터럽트
🔗소프트웨어 인터럽트
- 사용자 프로그램에서 발생하는 인터럽트(유효하지 않은 메모리에 접근하는 경우나 0으로 나누는 명령어 등)
'운영체제 > 그림으로 쉽게 배우는 운영체제(인프런 강의)' 카테고리의 다른 글
메모리 종류 (0) | 2022.03.29 |
---|---|
데드락 (0) | 2022.03.29 |
프로세스 동기화 (0) | 2022.03.28 |
CPU 스케줄링 (0) | 2022.03.25 |
프로세스와 쓰레드 (0) | 2022.03.24 |