[파이썬프로그래밍기초] 2강. 컴퓨터의 구성
방송통신대학교 파이썬프로그래밍기초 강의 정리 자료입니다.
1. 하드웨어와 소프트웨어
컴퓨터의 구성요소
- 하드웨어
: 컴퓨터를 구성하고 있는 물리적인 부품으로 CPU, SSD, Disk, 모니터, 키보드, 마우스 등이 이에 해당함.
- 소프트웨어
: 다양한 장치들을 동작시켜 특정 작업을 해결하는 프로그램으로 Windows, Mac, Chrome등이 이에 해당함.
사람의 문제해결과정
: 입력 → 기억&저장 → 제어 → 연산 → 출력 등의 과정을 통해 사람은 문제를 해결함.
하드웨어의 구조
: 일반적인 컴퓨터들은 폰 노이만 구조를 따라서 구성되어 있으며, 이는 사람의 문제해결과정과 유사하고, 범용적 컴퓨터를 만드는데 큰 기반이 되었음. 기능에 따라 입력장치, 기억/저장장치, 제어장치, 연산장치, 출력장치로 구분됨.
소프트웨어의 정의와 유형
: 각각의 고유한 기능을 수행하는 하드웨어가 언제 어떻게 동작하여 문제를 해결할 수 있는지 지시하는 명령어 집합으로 응용 소프트웨어(사용자의 업무나 목적에 맞게 문제 해결을 위한 처리 절차를 표현한 명령어 집합)와 시스템 소프트웨어(하드웨어를 제어, 관리하여 응용 소프트웨어를 실행할 수 있는 환경을 제공)로 구분됨.
2. 하드웨어의 이해
입력장치
: 명령과 데이터를 컴퓨터에 전달하는 장치로 입력값들을 컴퓨터가 처리할 수 있는 2진수 형태로 변환함. 대표적으로 키보드, 마우스, 스캐너, 터치스크린등이 있음. 최근들어서는 근육움직임을 인식해 명령을 전달하는 마이오(Myo)나 손의 움직임을 인식하여 정보를 전달하는 립모션(Leap Motion)등의 특수 입력장치들도 계속해서 생겨나고 있음.
출력장치
: 정보 처리 결과를 인간이 인식 가능한 형태의 데이터로 내보내는 장치로 2진수 형태의 데이터를 문자, 숫자, 도형, 음성, 영상 등의 형태로 변환해줌. 대표적으로 모니터, 스피커, 프린터, 초 지향성 스피커, 3D 프린터 등이 있음. 최근 들어서는 HUD(Head-Up Display / 현실정보와 가상정보를 결합해서 출력해주며, 주로 AR에 쓰임)와 HMD(Head-Mounted Display / 가상정보를 출력해주며, 주로 VR에 쓰임 )등의 특수 출력장치도 지속적으로 생겨나고 있음.
기억(저장)장치
: 명령과 데이터를 기억(저장)하는 하드웨어로 역할에 따라 주기억장치와 보조기억장치로 구분함. 주기억 장치에는 대표적으로 ROM(Read Only Memory / 주로 BIOS 정보를 저장하기 위한 장치임.)과 RAM(Random Access Memory / 특정 작업을 처리하기 위해 임시적인 데이터를 저장하는 장치임.)이 있음. 주기억장치의 한계를 극복하기 위해서 플로피디스크, 자기디스크, 광학디스크, 플래시 드라이브와 같은 보조기억장치가 함께 사용됨.
항목 | 기억장치(주기억장치) | 저장장치(보조기억장치) |
접근속도 | 빠름 | 느림 |
제조단가 | 높음 | 낮음 |
용량 | 작음 | 큼 |
전원 차단 시 | ROM: 기억내용 보존 | 기억내용 보존 |
RAM: 모든 내용 초기화 |
특수 기억(저장) 장치
: 자기디스크와 하드디스크는 데이터를 찾고 주고 받는데 (지연)시간이 필요하여 컴퓨터 전체의 성능을 떨어뜨리는 경우가 있었음. 이를 해소하고자 RAM을 이용한 저장장치인 SSD(Solid State Drive)가 등장하였음. SSD는 빠른 속도, 외부 충격에 강함, 적은 전력소모라는 장점을 가지고 있음.
제어와 연산장치
: 현대의 컴퓨터는 제어장치와 연산장치가 별도로 구분되어 있지 않고 CPU라는 장치에 결합되어 있음. 일반적으로 수백억개 이상의 트랜지스터가 들어가 있으며, 연산논리유닛(ALU), 레지스터(register / CPU 내부에서 초고속으로 데이터를 저장하거나 읽어냄), 제어 유닛(control unit)으로 구성되어 있음. 제어, 연산장치는 명령어와 데이터를 읽고 데이터를 연산 또는 처리하는 장치임.
3. 소프트웨어의 이해
시스템 소프트웨어
: 다양한 장치들을 서로 유기적으로 동작시켜 특정 작업을 수행할 수 있는 환경을 조성하는 프로그램으로 3개의 구성요소로 이루어져 있음.
- 운영체제(커널)
: 사용자가 컴퓨터를 효율적으로 운영, 관리, 사용할 수 있도록 하드웨어를 제어하는 소프트웨어
- 컴파일러
: 소스코드를 컴퓨터가 이해할 수 있는 기계어로 번역하는 소프트웨어
- 유틸리티
: 부가적인 기능을 제공하여 사용자가 컴퓨터를 효율적이고 편리하게 관리할 수 있도록 지원해주는 소프트웨어로 저장장치 검사, 바이러스 검사, 포맷 등과 같은 역할을 수행함.
운영체제의 개념
: 하나의 소프트웨어를 만들기 위해서는 사용자 작업 처리 명령어, 시스템 관리 명령어, 장치 제어 명령어 등이 필요한데, 컴퓨터가 여러개의 작업을 처리할 경우 시스템 관리 명령어와 장치 제어 명령어가 자원을 공유하므로 이를 조정하고 조율하는 것이 필요함. 이를 해결하기 위해서 시스템 환경 관리 역할을 수행하는 별도의 소프트웨어가 만들어졌는데 이게 바로 운영체제임.
즉, 운영체제는 컴퓨터의 자원(하드웨어)을 효율적으로 관리하고 응용프로그램에 자원을 할당하며 크게 5가지 역할을 함.
- 사용자 인터페이스
: 컴퓨터와 사용자를 매개하여 상호작용하는 방법을 제공하며, CLI(Command Line Interface), GUI(Graphic User Interface)등이 이에 해당함.
- 프로세스 관리
: 프로세스란 실행되고 있는 상태의 프로그램으로 일반적으로 프로그램은 보조기억장치에 단순히 저장되어 있는 상태를 가짐. 여러 프로그램 실행이 요청되면 한정된 자원(기억장치 등)을 효과적으로 사용하도록 조율해줌.
- 네트워크 인터페이스
: 컴퓨터는 고립된 상태로 동작하는 것이 아니라 네트워크를 통해 상호 데이터를 교환하는 경우가 일반적임. 응용 프로그램이 통신할 수 있는 환경을 제공하고 통신 장치(하드웨어)를 관리하는 역할을 함.
- 기억, 저장장치 관리
: 보조기억장치에 저장에 저장된 프로그램이 실행되기 위해서는 주기억장치에 적재된 후 CPU로 전달되어 실행이 되어야하는데 이 모든 것을 메모리에 올려서 실행하기에는 성능 및 비용상의 문제가 있어 효율적인 관리가 필요하며, 이를 운영체제가 맡아서 처리해줌.