비전공자를 웹개발자를 위한 이론 - 3. 하드웨어와 운영체제

코지클래식·2021년 11월 21일
1

개요

꼭 필요한 부분은 아닌데 설명을 안하고 넘어가기에는
하드웨어는 너무 방대하고 많은 정보를 포함하고 있습니다.
분량이 너무 많아서 글을 분리하게 되었습니다.

읽기 귀찮으신 분들은 건너뛰셔도 바로 글로 넘어가 주세요!

브라우저는 응용프로그램입니다.
응용프로그램은 "소프트웨어"입니다.
프로그램,프로세스,네트워크, 이미지 등등은
결국 0과 1로 이루어진 전기적인 신호로(=이진법, 기계어)
바뀌어 물리적인 공간(하드웨어)에서 연산되거나 저장됩니다.

결국 운영체제에 대해 설명하려면,
하드웨어가 어떤 것인지 알아야 설명이 가능합니다.

하드웨어란 무엇인지에 대해 먼저 알아보겠습니다.




1. 하드웨어란?

일반 상식

우리가 컴퓨터와 하드웨어에 대해 흔히 알고 있는 것

  1. 기계어는 0과 1로 이루어져 있습니다.
  2. 0과 1은 전기적신호(입력 O/X)에 의해 구분됩니다.

컴퓨터의 구조 / 용어 정리

  1. 전원장치
  2. CPU (메인보드/연산장치)
  3. 단기 저장 장치 (메모리/RAM)
  4. 장기 저장 장치 (디스크/ROM)
  5. 입출력장치(USB포트 - 키보드/마우스/모니터/스피커와 연결 됨)
  6. 네트워크장치

여기에서 우리가 눈여겨 봐야 할 것은 1) CPU 2)RAM 입니다.

전자회로의 구조

참고자료 : 마이크로프로세서의 구조

1. 숫자를 저장하는 방법 - RAM/ROM

  • 0과 1을 저장 하는 기능은 RAM과 ROM에서 처리합니다.
    RAM에는 임시데이터 혹은 현재 사용하는 데이터가 저장됩니다.
    ROM에는 장기간 저장할 데이터가 저장됩니다.

  • HOW?
    아래의 그림을 보면, 작은 칩에 여러개의 금속 다리가 보이실텐데요.
    이 각각의 금속 다리가, 전기 연결 가능/불가능으로 상태가 변경됩니다.
    연결되면 1, 연결이 되지 않으면 0 으로 변경되어 반도체에 저장됩니다.
    (*정확한 묘사는 아니지만, 이해를 쉽게 하기 위해 간추린 설명입니다.)

이렇게 저장된 것은 0과 1로 이루어진 숫자이지만 금속다리 하나하나가 엄청나게 작기 때문에
작은 부피의 USB, RAM카드 등으로도 많은 데이터를 저장할 수 있는 것입니다.
아니, 이게 작아봤자 얼마나 작냐구요?

  • !금속다리는 사실 외부와의 연결부위일 뿐이고, 우리 눈에는 보이지도 않을 만큼 엄청나게 많은 내부 다리가 저 검은 판 내부에 있습니다.

2. 계산하는 방법 - CPU

계산은 CPU내에서 처리합니다.
어떻게 처리할까요?
CPU에서는 이진수에 대한 덧셈,뺄셈,곱셈만 가능합니다.

예를 들어, 다리 전체가 8개로 이루어져 있다면
0 = 0000_0000
1 = 0000_0001
으로 표현됩니다.

1이라는 숫자를 더할 때에는
옆자리의 신호를 켜고 본인은 꺼지는 식의 동작을 합니다.
0000_0001 -> 0000_0010

3. 결론

여기서 우리는, 컴퓨터가 0과 1로 이루어진 언어로 되어 잇다는 것이
무슨 말인지 깨달을 수 있었습니다.

  1. 데이터는 0과 1로 이루어져 있다.
  2. 데이터는 저장장치(메모리)에 저장한다.
  3. 데이터는 계산장치(CPU)에서 계산된다.

4. 계산하기 위해 필요한 것

위의 설명으로 우리는 2가지를 배웠습니다.

  • CPU는 계산기이다.

  • 메모리는 계산결과/중간값등을 저장한다.

하지만 계산하는 것이 그렇게 쉽지 않습니다.

숫자(데이터)를 계산하기 위해서는 대략적으로 4가지의 동작이 필요합니다.

  1. 계산식을 입력 받기
  2. 계산할 계산식 해석
  3. 계산 하기
  4. 결과 반환하기

추가적으로 이런 일도 필요할 수 있습니다.

  1. 모니터에 보여줄 데이터를 출력 + 동시에 마우스의 입력 받기를 동시에 하기.
  2. 파일 100개를 한번에 업로드 하면 모든 파일의 속도를 일정하게 맞추기.

그러나 이렇게 세세한 조건들을 모두 하드웨어로 조정하면 범용성이 떨어지게 됩니다.
결국 이런 세부내용을 조정하고 위해 운영체제가 나타났습니다.




2. 운영체제란?

개요

  • 운영체제란 Operating System, 줄여서 OS라고 합니다.
  • 대표적인 운영체제로는 DOS, Windows XP/10, Mac OS, 안드로이드, Linux, Ubunutu.. 등등이 있습니다.
  • 여기에서는 일반적인 컴퓨터에서 사용하는 운영체제에 대해서만 설명해보고자 합니다.

운영체제의 역할

운영체제는 많은 역할을 수행하지만 간단하게 압축해보면

  1. 하드웨어를 효율적으로 작동시키기 위한 관리

  2. 하드웨어와 응용프로그램 사이의 연결

  3. 사용자를 위한 인터페이스 제공

으로 나눌 수 있습니다.

1. 하드웨어 관리

하드웨어(CPU,메모리)를 일종의 메모장과 계산기라고 한다면..

OS는

  • 그 때 그때 필요한 부분을 연산을 시킵니다. (멀티태스킹, 인터럽트)
  • 각각 프로그램의 동작마다 쓰이는 각각의 메모장을 구분합니다.
    이를 통해 공통으로 쓰이는 부분, 혹은 다른 계산시에 접근하면 안되는 부분을 분리합니다.
    (메모리 관리)
  • 계산에 필요한데 없는 부분이 있다면, 책(ROM,하드디스크)에 접근해서 메모장을 가져옵니다. (가상 메모리)

2. 하드웨어와 응용프로그램 사이의 연결

하드웨어(CPU, 메모리)는 0과 1밖에 받아들이거나 출력하지 못합니다.
그러나 기계어(이진법)은 사람이 다루기에는 너무나도 직관적이지 않은 언어형태입니다.
그래서 프로그래머는 HTML/CSS/JS/Python 등등 많은 "프로그래밍 언어"를 사용하고 있습니다.
OS는 이 프로그래밍 언어와 기계어의 간극을 줄여주는 통역사의 역할을 합니다.

어떻게 번역을 하는지에 대해서는
어셈블러/컴파일러/인터프리터 의 키워드로 검색해보시길 바랍니다.

3. 사용자를 위한 인터페이스 제공

OS는 우리가 GUI(*) 환경에서 컴퓨터를 다룰 수 있게 해줍니다.

옛날에는 우리가 흔히 터미널/cmd라고 부르는 CLI(*)에서만 컴퓨터를 사용할 수 있었습니다.

(* 그래픽 유저 인터페이스 - 마우스와 아이콘을 사용하는 인터페이스)
(* 커맨드 라인 인터페이스 - 키보드와 명령어를 사용해서만 동작)
(* 도스는 이 중간단계라고! 볼 수 있습니다.)


개발자의 역할

프론트 엔드

프론트엔드 기준에서는 운영체제에 관하여 관여할만한 일이 별로 없다고 생각됩니다.

백엔드

백엔드 기준에서는
서버에 많은 요청이 들어왔을 때, 연결이나 프로세스를
어떤 식으로 쓰레드/병렬 형태로 운영할 것인가?

에 대해 찾아보실 만하다고 생각됩니다.

깊이 더 깊이

사실 이번 글에 대해서는 비전공자, 그것도 입문자가
더 깊이 찾아보기에는 적절하지 않는 내용이 많은 것 같습니다.
(사실 저도 잘 모르는 내용입니다!)
그래도 혹시 몰라 세세한 내용을 조금 더 적어봅니다.

프로세스와 스레드의 차이

  • 프로세스
  • 스레드
  • 멀티 스레드 vs 멀티 프로세스

스케줄러

  • 장기, 단기, 중기 스케줄러

CPU 스케쥴러

동기와 비동기의 차이

메모리 관리 전략

  • 가상메모리
  • 캐시
  • 페이징, 세그멘테이션
profile
코지베어

0개의 댓글