운영체제 들어가기

굥굥이·2022년 2월 18일
0
post-thumbnail

🐓🐓🐓 난 아직 이런 거도 잘 모르는.. 그래서 일할 때마다 컴퓨터 얘기가 주늑드는 닭대가리와 비슷한 지식을 소유한 사람이므로 컨셉을 닭으로 잡아야 겠다. 이런 나에게 멋있는 이모지는 사치다. 내일 또 복습해서 다시 수정해서 다시 정리해야겠다.

🐓 운영체제 개요

질문을 하겠다. "컴퓨터는 운영체제가 있어야 동작하는가?"
=> 정답은 "없어도 동작한다"이다. 하지만 운영체제가 없으면 처음 설계한 그대로만 동작할 뿐 다른 기능을 추가할 수가 없다. 예를 들면 통화 기능만 가능한 옛날 전화기여러 애플리케이션을 설치해 기능을 추가할 수 있는 지금의 스마트폰!
-> 그리하여 요즘에는 운영체제가 쓰이는 곳이 굉장히 많은데, 개인용 컴퓨터에는 Windows나 MacOS가 많이 쓰이고 대형 컴퓨터나 서버용으로는 유닉스나 리눅스가 많이 쓰인다. 스마트폰과 태블릿에는 안드로이드와 iOS운영체제가 쓰이고 네비게이션, 스마트 워치, 냉장고, 세탁기 등에 들어가는 임베디드 운영체제가 있다.
=> 그렇다면 운영체제가 하는 일을 알아보자.
1. 프로세스 관리(노래들으면서 게임 가능)
2. 메모리 관리
3. 하드웨어 관리(사용자가 직접 접근 불가능)
4. 파일 시스템 관리

🐓 운영체제의 역사

흐름을 정리하면, 비싼 CPU를 더 많이 사용하려고 고민했었고, 그 후엔 오퍼레이터와 프로그래머사이에서 낭비되는 시간을 줄이려고 했다. 그리하여 오늘날의 운영체제가 탄생하였다.
-> 대충 흐름 보기 : 애니악(스위치와 배선작업) -> 직접 회로(CPU와 메모리만 있음. 펀치카드 이용) -> 싱글시 스트림 배치시스템(여러 개의 작업은 가능하나 순서대로만) -> 시분할 시스템(시간을 분할해서 사용하는 시스템), 컴퓨터는 비싸므로 여러 사용자들이 터미널로 하나의 컴퓨터에 접근함, 개인 컴퓨터처럼 느껴져서 개인컴퓨터처럼 사용, 파일시스템등장 -> UNIX(멀티프로그래밍, 다중사용자, 파일시스템) -> 개인용 컴퓨터의 시대(매킨토시, MS-DOS...)

🐓 운영체제의 구조

사용자가 커널에 접근하려면 인터페이스(GUI/CLI)를 통해 접근하여야 하고, 어플리케이션이 커널에 접근하려면 시스템콜을 통해 접근하여야 한다. 커널도 드라이버를 통해 하드웨어에 접근하여야 한다.
-> 운영체제의 핵심은 커널이다.
커널은 프로세스와 메모리, 저장장치를 관리하는 핵심적인 기능을 담당하고 있다.
사용자는 커널에 직접 접근할 수 없고 인터페이스를 통해서 접근할 수 있다.
인터페이스는 GUI와 CLI 두 개로 나뉘는데 텍스트냐 그림이냐 차이만 있을 뿐 커널에 접근하기 위한 목적은 같다.
먼저 GUI(Graphic User Interface)를 보자. 말 그대로 그래픽으로 된 인터페이스이다.(window나 맥같은 것들)
CLI(Command-Line Interface). 유닉스나 리눅스 같은 운영체제가 기본적으로 제공하는 인터페이스로 텍스트를 이용해 커널과 상호 작용한다.
정리하면 , 사용자는 인터페이스(GUI/CLI)를 통해 커널에 접근하고, 어플리케이션은 시스템콜(혹시나 데이터가 있는 곳에 들어가서 기존에 있던 데이터를 덮어쓰면 안되므로, 시스템콜을 이용하면 빈공간에 저장함)을 통해 커널에 접근한다.
그리고 이 커널에서 하드웨어(키보드, 마우스, 그래픽카드 등)로 접근하려면 드라이버를 통해 접근한다.

🐓 컴퓨터 하드웨어와 구조

스위치와 배선을 조정해서 프로그램을 변경했던 애니악에서, 메모리에 올리는 방식으로 프로그램을 변경할 수 있는 프로그램 내장 방식의 폰노이만 구조. 그리고 다른 하드웨어를 연결하는 장치인 메인보드, CPU(산술논리연산장치/제어장치/레지스터), 메모리(램과 롬)를 알아보자.
-> 오늘날 대부분의 컴퓨터는 프로그램 내장 방식의 폰 노이만 구조를 하고 있다.
예전에 애니악은 하드웨어로 프로그램을 만들었으므로 프로그램이 달라질 때마다 매번 스위치와 배선을 다시 조정해야 했다.
폰노이만은 이를 해결하기 위해 CPU와 메모리를 두고 이들 사이는 버스(데이터를 전달하는 통로)로 연결한다. 프로그램을 메모리에 올려서 실행시키는데, 프로그램을 메모리에 내장했다고 해서 프로그램 내장 방식이라고 한다.
이제 명령에 따라 프로그램이 실행되므로 배선을 바꾸는 대신 소프트웨어만 바꿔주면 되기 때문에 편해졌다.
=> 가장 기본이 되는 것은 메인보드다. 메인보드는 다른 하드웨어를 연결하는 장치이다.
장치간에 데이터를 전송하는 건 메인보드의 버스가 담당한다. 폰 노이만 구조이므로 CPU와 메모리가 필수적이다.
CPU와 메모리를 메인보드에 꽂아주고 하드디스크 연결단자에는 하드디스크를 꽂아준다. 마찬가지로 그래픽카드 연결 단자에는 그래픽카드를 꽂아준다.
출력단자의 모니터선을 꽂으면 모니터가 작동하게 된다. 그리고 USB단자에 마우스와 키보드를 연결해준다. 사운드단자에 스피커를 연결해준다.
=> CPU(Central Processing Unit = 중앙처리장치)의 구조를 알아보자.
cpu를 구성하는 장치는 세가지로 나뉜다.
산술논리연산장치(데이터연산) / 제어장치(모든 장치들의 동작을 지시하고 제어) / 레지스터(CPU내에서 계산을 위해 임시로 보관하는 장치. 변수라고 생각하면 됨)
=> 메모리 종류를 살펴보자.
메모리는 크게 RAM(Random Access Memory)과 ROM(Read Only Memory)으로 구별할 수 있다.
램은 랜덤으로 데이터를 읽어도 저장된 위치와 상관없이 읽는 속도가 같다.
램은 전력이 끊기면 데이터를 잃어버리기 때문에 메인 메모리로 사용된다.
롬은 전력이 끊겨도 데이터를 계속 보관할 수 있지만 데이터를 한번쓰면 수정이 불가능하다. 그래서 롬은 컴퓨터의 부팅과 관련된 바이오스를 저장하는데에 주로 쓰인다.

🐓 컴퓨터의 부팅과정

컴퓨터에 전원이 켜지면 ROM에 저장된 바이오스가 실행되고, 만약 주요장치에 이상이 있다면 부팅이 이뤄지지 않고, 이상이 없다면 하드 디스크에 있는 부트로더를 메모리로 가져와서 실행한다. 그리고 운영체제가 하나면 바로 운영체제를 메모리에 불러오고 이제부터 실행되는 모든 응용 프로그램은 메모리에 올라와서 운영체제가 관리한다.
-> 컴퓨터를 켰을 때 일어나는 과정.
컴퓨터에 전원을 누르면 ROM에 저장된 바이오스가 실행된다.
바이오스는 전원, CPU, 메모리, 키보드, 마우스, 하드디스크 등 주요 하드웨어에 이상이 없는지 체크한다.
만약 주요장치에 이상이 있다면 오류음을 내면서 부팅이 이뤄지지 않고, 이상이 없다면 하드디스크에 있는 마스터 부트 레코드에 저장된 부트로더를 메모리로 가져와서 실행한다.
만약 윈도우즈 운영체제와 리눅스 운영체제가 둘 다 설치되어 있는 컴퓨터라면 어떤 운영체제를 실행할지 선택하는 화면이 나온다.
운영체제를 선택했거나 운영체제가 하나면 바로 운영체제를 메모리로 불러오고 모니터에 바탕화면이 보이게 된다.
이제부터 실행되는 모든 응용 프로그램은 메모리에 올라와서 운영체제가 관리한다.

🐓 인터럽트

질문왕 CPU는 폴링방식. 입출력 관리자가 CPU의 부하가 되어 질문왕에서 벗어난 CPU는 인터럽스.
-> CPU가 입출력 장치에 데이터를 읽거나 쓰려고 하는 상황을 생각해보자.
CPU는 입출력 작업이 들어오면 입출력 관리자에게 입출력 명령을 내린다.
CPU관점에선 입출력 명령이 언제 완료될지 알 수 없기 때문에 주기적으로 계속 확인해줘야 한다.(입출력 관리자한테 계속 들어왔냐고 물어봄)
이런 방식을 폴링(Polling)방식이라고 한다. 주기적으로 CPU가 확인해줘야 하니 성능이 좋지 않다.
=> 인터럽트는 폴링 방식의 단점을 해결한 방식이다.
CPU가 입출력 관리자에게 입출력명령을 내리고 자기는 다른 작업을 계속한다.
입출력 관리자는 입출력이 완료됐을 때 CPU에게 신호를 주고 CPU는 그 신호를 받아 인터럽트 서비스 루틴(ISR)을 실행시켜 작업을 완료한다.
인터럽트 서비스 루틴은 특정 인터럽트가 들어오면 그 인터럽트를 처리하는 함수이다.
인터럽트는 비동기적으로 동작하기 때문에 성능에 이점이 있다.
인터럽트는 하드웨어방식과 소프트웨어 방식 두개가 있다.
하드웨어 방식은 조금 전 설명한 입출력 등과 같은 인터럽트가 있고, 소프트웨어 방식은 사용자 프로그램에서 발생한 인터럽트가 있다.
예를 들면 유효하지 않은 메모리에 접근하거나 0으로 나누는 명령어 등이 있다.

profile
아자아자 파이띵굥!

0개의 댓글