본문 바로가기

Study_C, C++/홍정모의 따라하며 배우는 C언어

[홍정모의 따라하며 배우는 C언어] 0.1-컴퓨터의 구성 요소들 ~ 0.3 운영체제가 해주는 일들

728x90
  • C언어는 Transistor를 개발한 벨 연구소에서 Unix를 만들다 Assembly로의 개발에 한계를 느껴 개발된 언어
  • C++도 이 연구소에서 개발됨
  • OS(Unix)를 만들던 언어이므로 효율성이 높고, OS의 주요 역할이 HW 제어이므로 C언어도 HW에 강력함
    • 우리가 사용하는 모든 프로그램은 HW를 사용하기 위함이다

0.1 컴퓨터의 구성 요소들

  • 사용자 -> 입력장치 -> 컴퓨터 본체 -> 출력장치 -> 사용자 -> 입력장치
  • 위의 과정을 반복하며 동작
    • 입/출력이 다른 컴퓨터에 의해 진행될 수도 있음

 

- 메인보드 (마더보드) : 컴퓨터에서 주회로가 내장된 보드. CPU, 메모리 등이 내장되어 있다.

1) 중앙 처리장치 (Central Processing Unit) : 컴퓨터에서 모든 연산을 담당. 일을 하는 부분

  • 보통 수십~수백억개의 트랜지스터들로 구성되어있다
  • 컴퓨터 및 OS에 필요한 명령과 처리를 실행한다

 

2) 그래픽스 카드(Graphics Card) : GPU + 그래픽스 용도의 Memory

  • 그래픽스 카드는 자체적으로 팬을 가지고 있음. 그래픽스 카드 자체를 하나의 컴퓨터로 볼 수 있음
  • GPU (Graphics Processing Unit): 그래픽 카드 안의 CPU
  • 특정 연산을 여러번 반복할 시 (ex) 딥러닝) 그래픽스 카드 여러개로 계산량을 높임
  • 보편적으로 그래픽스 카드와 디스플레이가 연결됨
  • 초기의 그래픽스 카드는 카드처럼 얇았으나 게임분야의 발전에 따라 지금처럼 두꺼워짐
  • 특정 3D 렌더링 작업 속도 단축을 위해 개발된 ASIC였으나, 시간이 지나며 범용적인 병렬 프로세서로 발전하여 Deep Learning 등의 다양한 분야에서 활용됨
    • Rendering : 이미지 합성의 의미를 가지며 컴퓨터 프로그램을 사용하여 Model 또는 이들을 모아놓은 장면인 Scene 파일로부터 영상을 만들어내는 과정을 말한다

 

- CPU vs GPU

 

CPU(왼쪽)과 GPU(오른쪽)의 동작 방식

  • CPU는 직렬 명령 처리를 위해 설계되어 서로 다른 명령어들을 빠르게 처리할 수 있다
  • 반면 GPU는 병렬 명령 처리를 위해 설계되어 많은 양의 동일한 명령어들을 빠른 속도로 처리할 수 있다
    • CPU에 비해 다수의 코어를 가지고 있으나 성능은 CPU보다 떨어진다
  • 따라서 복잡한 작업에는 CPU가 유리하며 다수의 단순 반복 작업에는 GPU가 유리하다

 

3) 주 기억장치 - 메모리 (Primary Storage - Computer Memory) : 저장을 하는 부분

  • 주 기억 장치는 컴퓨터 내부의 CPU가 현재 처리하고 있는 내용을 저장하는 역할을 함
  • 주 기억장치의 종류로는 RAM, ROM이 있다
    • RAM (Random Access Memory) : 보조 기억 저장 장치의 데이터 (OS, 응용 프로그램 등)를 일정량 복사해 임시 저장한 후 CPU에 빠르게 전달하는 역할
    • 전원을 끄면 데이터가 사라지므로 (휘발성. 이 방식이 속도가 빨라서 사용), 따로 데이터를 저장해놓을 보조 기억장치 필요
    • 실행중인 파일은 항상 보조기억장치에 저장해줘야 함
    • ROM (Read Only Memory) : 읽기 전용 메모리, 저장된 메모리를 읽을수만 있고 새로운 정보를 기억시킬 수 없음
    • 전원을 종료해도 데이터가 소멸되지 않음 (비휘발성). BIOS같은 System에 기억시키고 변화시키면 안되는 주요 데이터 저장 
  • 보통 보조 기억장치는 다른 곳에 연결
  • RAM의 용량이 클수록 보조 기억 저장 장치에서 한번에 RAM으로 올리는 Data의 양이 늘어나 다중작업에 유리
  • CPU와 Memory는 물리적으로 가까워 서로 통신을 주고 받음.

 

4) 보조 기억 장치 (Auxiliary/Secondary Storage) : 물리적인 Disk가 연결되어 있는 기억장치

  • 컴퓨터를 꺼도 데이터를 저장함 (비휘발성). 주 기억장치보다 훨씬 느림
  • OS, 응용프로그램, 데이터 등이 저장됨
  • 보조 기억 장치의 종류로는 HDD, SSD가 있다
    • HDD (Hard Disk Drive) : 내부에 디스크가 돌아가는 걸 핀이 돌아가는 순서로 찾음
    • 물리적으로 움직이는 부분 존재
    • SSD (Solid - State Drive) : Flash Memory (USB같은 비휘발성 컴퓨터 기억 장치) 가 발전된 형태
    • 물리적으로 움직이는 부분 X
    • HHD보다 상대적으로 빠르고 비쌈

HDD(왼쪽)과 SSD(오른쪽)

  • HHD는 플로피 디스크 (FFD)보다 딱딱해서 Hard라는 이름이 붙음. 원리는 FFD와 동일
  • 플로피 디스크를 장치에 넣으면 돌면서 (Driving 하면서) 데이터를 읽어서 Drive라는 이름이 붙음 
  • 전통적으로  A, B 드라이브가 플로피 디스크 드라이브여서 요즘 컴퓨터에선 C 드라이브부터 시작함

 

-  HDD vs SSD

  • HDD 
    • 기계적 매체(지정된 주소로 직접 이동)
    • 수명 3~5년 정도
    • 온도에 큰 영향을 받지 않음
    • 물리적인 처리를 반복하다보니 Bad Sector(물리/논리적 손상) 위험 있음
    • 용량 대비 가격이 SSD에 비해 높음
    • 아카이빙(장기간 자료 보관)에 유리 : 무전원으로 20년 정도 보관 가능
  • SSD
    • 전자적 매체(전기적 신호 사용)
    • 수명 20년 정도
    • 고온에 취약 : Throttling(발열, 배터리 수명 등의 이유로 전자기기의 성능을 낮추거나 종료시키는 것) 위험 존재
    • FLASH Memory는 정전기에 취약
    • 고온에서 데이터 자연 증발 현상으로 인한 데이터 유실 가능성 있음
    • 전력 소비량이 적어 발열이 적음

 

 

0.2 컴퓨터를 켤 때 일어나는 일들

1)  전원버튼 on

 

2) 전원 공급 장치가 메인보드에 전원 공급 -> 그 안의 부품들에 전기가 공급 

Main Board의 구성 요소 중 일부

 

3) 부트 프로그램 (하드웨어 검사) 실행 

  • 메인 보드에 전원이 들어오면 ROM BIOS가 가장 먼저 실행
    • BIOS는 내용이 변화되면 안되므로 ROM에 저장
  • BIOS 실행을 위해 1MB의 공간 필요

일반적인 BIOS 화면. 출처 : https://www.easeus.co.kr/partition-manager-software/uefi-vs-bios.html

  • Basic Input Output System 
    • PC용 Firmware. PC의 기본적인 입출력을 관리하며 메인보드 시작시의 절차들을 담고 있음
    • 전원이 켜지면 POST(Power On Self Test)를 통해 HW의 정상동작 여부 검사 후 보조기억장치 내의 OS를 불러와 부팅 시작
    • 입출력을 포함한 PC의 모든 HW/SW의 기본적인 동작을 제어하고 컴퓨터의 HW와 OS를 연결하는 역할을 한다
    • 따라서 HW가 바뀌더라도 OS에서 일일히 설정할 필요가 없다
    • PC의 가장 기초적인 기능을 담당하므로 BIOS가 손상되거나 지워지면 PC는 동작을 전혀 하지 못한다
  • 2010년 경 부터 UEFI (Unified Extensible Firmware Interface)가 보급되어 기존의 BIOS를 대체함
  • UEFI : OS와 Platform Firmware 간의 SW Interface를 정의하는 공개 사양
    • Platform : SW가 구동 가능한 HW Architecture나 SW Framework의 종류를 설명하는 단어. 컴퓨터 아키텍처, OS, 프로그램 언어, 관련 Run Time Library 또는 GUI를 포함한다
    • Interface : 서로 다른 두 개의 System이나 Device 사이에서 Data나 Signal을 주고받을 때의 매게체, 경계면으로, 컴퓨팅에서는 컴퓨터 시스템들끼리 정보를 교환할 때 공유 경계를 의미한다
    • 즉 두 장치나 시스템간의 접점, 경계면을 의미한다
  • 즉 컴퓨터의 Firmware를 OS에 연결하는 역할을 한다
    • 컴퓨터 부팅 시 첫번째로 실행되어 HW를 OS와 연결하여 OS가 부팅되고 Hard Drive의 정보를 Load할 수 있도록 함

UEFI 동작 과정. 출처 : https://www.easeus.co.kr/diskmanager/what-is-uefi.html

  • Hardware 구성 요소가 연결되어 있는지 확인한 후 구성 요소를 깨우고 OS에 연결함
  • UEFI는 기존의 Legacy BIOS를 대체한다
  • 특정 Firmware를 통해 컴퓨터의 Mother Board 위에서 작동하며 제조 과정에서 사전 설치됨

- UEFI vs BIOS : 기능상으로는 동일한 역할을 함 (OS Load 전 OS와 Firmware Hardware를 연결)

1. UEFI

  • 지원 드라이브 크기 : 8ZB (BIOS의 10^12 배 크기)
  • 사용 환경 :  3TB 이상의 OS Hard Drive, GPT Disk
    • OS는 32/64 bits
    • 즉 최신의 OS에서는 UEFI를 사용함
  • 초기화 위치 및 시작 정보 : EFI 파일의 .efi 파일
  • BIOS에 비해 부팅 속도 빠름
  • 보안 부트 (맬웨어에 의한 PC 손상 방지), 네트워킹 기능 (원격 문제 해결 및 구성) 지원
    • Malware : 프로그래밍 가능한 기기 또는 네트워크를 손상시키거나 악용하도록 설계된 모든 종류의 악성 소프트웨어를 가리키는 용어
  • BIOS에 비해 더 유용한 세부 설정 메뉴를 가짐

 

2. BIOS

  • 지원 드라이브 크기 : 2TB
  • 사용 환경 : 2TB 이하의 OS Hard Drive, MBR Disk
    • 2.1TB 이상에선 부팅 불가
    • 16bits만 사용 가능
  • 초기화 위치 및 시작 정보 : Firmware
  • 보안 부트, 네트워킹 기능 지원 X
  • HW 한번에 초기화가 어려워 부팅 속도가 UEFI에 비해 느림

- 컴퓨터가 UEFI를 사용중인지 확인하는 방법

  • Windows + R 키를 누르고 MSinfo32 입력

  • 확인 후 뜨는 창에서 'BIOS 모드'를 찾아 확인 가능
    • 레거시인 경우 BIOS, UEFI인 경우 UEFI 사용 중

UEFI 사용 여부 확인

 

4) 운영체제 로드 (OS가 보조 기억 장치 -> 주 기억 장치로 복사가 됨) 

  • 운영체제는 보조 기억 장치에 저장 -> 주 기억장치는 전원을 끄면 데이터가 사라지기 때문
  • CPU는 RAM과만 일을 하고, 보조 기억 장치엔 직접 접근 불가
  • RAM에 OS를 복사한 후 그것을 CPU가 실행시킴

 

5) 운영체제 실행 : CPU가 OS 실행

 

0.3 운영체제가 해주는 일들 (IOS, Windows, Android, Mac Os...)

  • 컴퓨터를 킨 후의 모든 일은 OS를 통해서 함
  • C언어도 Unix를 개발하다가 나온 부산물
    • Windows를 제외한 현재 대부분의 현대적 컴퓨터 OS의 원형이 되는 운영체제
    • Unix에서 Linux(무료 OS)가 나옴 
  • OS (Operating System) : Computer의 Resource들(Hardware, Software 등)을 제어하고 Program에 대한 일반적 서비스를 지원하는 System Software
  • 여러개의 프로그램 실행 시 OS가 어떤 프로그램이 하드웨어의 자원들(CPU, 메모리등)을 사용할지 제어하는 역할을 함

  • 커널(Kernel) : OS에서 항상 메모리에 올라가 있는 OS의 핵심 부분으로, 하드웨어를 담당하는 부분이다
  • 응용프로그램과 하드웨어 사이에서 Interface를 제공하여 둘을 중계해주며 컴퓨터 자원들을 관리한다
  • Kernel은 항상 컴퓨터 자원들만을 바라보므로 User와의 상호작용은 지원하지 않는데, User와의 직접적인 상호작용을 위해 Shell 등의 명령어 해석기 프로그램을 제공함
  • Shell : CLI(Command Line Interface) 명령을 해석하는 Software로, 명령어와 프로그램을 실행할 때 사용하는 Interface 이다
    • CLI : 문자열의 형태로 작업 명령을 입력하여 컴퓨터에 명령을 내리는 방식. 즉 글자를 입력하여 컴퓨터에 명령을 내리는 방식을 뜻한다
  • 즉 User가 OS의 서비스에 Access하기 위한, Kernel과 User 간의 다리 역할을 한다
    • 사용자로부터 명령을 받아 해석하고 프로그램을 실행
    • User가 Shell에 명령어 입력 -> OS가 알아들을 수 있게 해석 -> Kernel이 그 내용을 받음 -> 하드웨어에 직접 명령
    • Shell은 자체로 프로그래밍 기능이 있어 여러 명령을 반복적으로 수행하는 작업을 하나의 프로그램으로 제작할 수 있음
    • 위와 같은 프로그램을 Shell Script라고 함
    • 또한 초기화 파일 기능을 통해 User의 환경설정을 할 수 있음 (로그인 시 해당 초기화 파일이 실행되어 User의 초기 환경이 설정됨)

출처 : https://jhnyang.tistory.com/entry/%EB%A6%AC%EB%88%85%EC%8A%A4%EC%85%B8Shell%EC%9D%B4%EB%9E%80-%EC%85%B8%EC%9D%98-%EB%B3%80%EA%B2%BD-%EC%89%98-%EA%B0%9C%EB%85%90-%EA%B8%B0%EB%8A%A5-%EC%A2%85%EB%A5%98%EC%99%80-%ED%8A%B9%EC%A7%95sh-bash-csh-tcsh-ksh

  • 즉 아래와 같이 Terminal 창에서 명령어를 입력하는 환경을 Shell이라 한다. OS에 따른 Shell 실행 법은 아래와 같다
    • Window : 명령 프롬프트(CMD)
    • macOS : Terminal
    • Prompt : User의 명령을 받아들일 준비가 되었음을 모니터에 나타내는 표시로, Terminal에서 키보드의 입력을 확인하고 편집할 수 있는 한 줄의 공간을 의미한다
  • Terminal : Shell을 실행하기 위해 글자 입력을 받아 컴퓨터에 전달하거고 컴퓨터의 출력을 화면에 글자로 출력
    • Terminal은 단순 Text 입출력 환경이고 컴퓨터랑 상호작용하여 명령을 처리하고 출력을 내는 것은 Shell이 한다
    • 즉 Terminal은 명령어에 액세스 할 수 있도록 하는 Interface이다
    • 물리적(하드웨어 형태) Terminal은 Console이라고 한다 (시스템에 직접 연결)
    • Terminal은 콘솔에서 원격제어 환경까지 포함하는 더 넓은 의미이다
  • Shell과 Terminal은 항상 같이 실행되어 둘은 보통 같은 의미로 사용한다

Ubuntu Terminal 창

  • Shell의 종류로는 Bourne Shell(sh), bash, C Shell(csh)등이 있다
  • 현재 Linux는 bash를 표준 Shell으로 사용하고 있음 (GNU OS, Mac, OS X 등의 다양한 OS에서 사용 중)

 

$ ehco $SHELL
$ env | grep SHELL
  • 위의 두 명령어 중 하나를 통해 현재 사용중인 Shell 확인 가능

 

  • 시스템 프로그램 (System Program) : 컴퓨터의 시스템에 대해서 작동은 하지만 OS의 핵심은 아닌것들 ex) 바탕화면 바꾸기
  • 응용 프로그램(Application Program) : 시스템 프로그램을 제외한 나머지 대부분의 프로그램들
  • 하드웨어를 어떻게 사용할지를 OS를 만들며 미리 만들어 다른 프로그래머들에게 제공
  • 하드웨어를 직접 다루는 것은 어려운 일이다
  • 프로그램 개발 시 여러 부분을 직접 개발하지 않고 인터페이스라는 도구를 이용해 개발

 


강의 출처 : https://www.inflearn.com/course/following-c/dashboard

 

 

홍정모의 따라하며 배우는 C언어 - 인프런 | 강의

'따배씨++'의 성원에 힘입어 새롭게 개발된 C 언어로 시작하는 프로그래밍 입문 강의입니다. '따배씨'와 함께 프로그래밍 인생을 업그레이드 해보세요., 따라하며 배우는 C언어 '따배씨++'의 성원

www.inflearn.com

 

참고 자료 : 

https://www.easeus.co.kr/diskmanager/what-is-uefi.html

 

UEFI란 무엇이며 Windows에서 사용하는 방법

UEFI가 무엇인지, 컴퓨터에서 UEFI를 언제 사용해야 하는지, Windows용 UEFI를 설정하는 방법을 알고 있습니까? 이 전체 가이드는 UEFI에 대해 알아야 할 모든 것을 제공하고 Windows 11 또는 최신 운영 체

www.easeus.co.kr

https://mindstation.tistory.com/152

 

컴퓨터 주기억장치 & 보조기억장치 란...무엇인가

컴퓨터에 있어 기억장치는 필요한 정보를 보관하고, 저장하는 매우 중요한 장치 중 하나 입니다. CPU의 저장장치 레지스터가 있고, CPU의 명령이나, 자료를 일시적으로 저장하는 캐시가 있습니다.

mindstation.tistory.com

https://www.intel.co.kr/content/www/kr/ko/products/docs/processors/cpu-vs-gpu.html

 

CPU와 GPU 비교: 차이점 알아보기

CPU와 GPU의 차이점을 살펴보고 딥 러닝 및 AI를 가속하는 각각의 사용 사례와 아키텍처 이점 및 역할을 알아보십시오.

www.intel.co.kr

https://minkwon4.tistory.com/295

 

[OS] 커널(Kernel)이란

커널이란 커널은 운영체제 중 항상 메모리에 올라가 있는 운영체제의 핵심 부분으로써 하드웨어와 응용 프로그램 사이에서 인터페이스를 제공하는 역할을 하며 컴퓨터 자원들을 관리하는 역할

minkwon4.tistory.com

https://jhnyang.tistory.com/entry/%EB%A6%AC%EB%88%85%EC%8A%A4%EC%85%B8Shell%EC%9D%B4%EB%9E%80-%EC%85%B8%EC%9D%98-%EB%B3%80%EA%B2%BD-%EC%89%98-%EA%B0%9C%EB%85%90-%EA%B8%B0%EB%8A%A5-%EC%A2%85%EB%A5%98%EC%99%80-%ED%8A%B9%EC%A7%95sh-bash-csh-tcsh-ksh

 

[리눅스]셸(Shell)이란? 셸의 변경, 쉘 개념, 기능, 종류와 특징(sh, bash, csh, tcsh, ksh)

리눅스 완전 정복 : 리눅스 목차 셸 스크립트 프로그래밍을 하려면 셸이 무엇인지 먼저 알아야겠죠! [목차] 1 셸이란 2. 셸의기능 3. 셸의 종류와 특징 4. 사용중인 셸 확인 5. 셸 변경하기 셸(Shell)

jhnyang.tistory.com

https://hanamon.kr/%ED%84%B0%EB%AF%B8%EB%84%90-%EC%BD%98%EC%86%94-%EC%89%98-%EB%AA%85%EB%A0%B9%EC%A4%84terminal-console-shell-command-line%EC%9D%98-%EC%B0%A8%EC%9D%B4-2/

 

터미널, 콘솔, 쉘, 명령줄(Terminal, Console, Shell, Command line)의 차이 - 하나몬

what is the difference between Terminal, Console, Shell and Command Line? 터미널(Terminal) : 텍스트 입출력 환경 => CLI, 그냥 CLI 이거다. 명령을 처리하고 결과를 출력할 수 없다. 그냥 인터페이스이다. 콘솔(Console) :

hanamon.kr