※ 해당 게시글은 주제를 탐구하면서 주관적인 생각을 정리 한 글입니다.
산술 논리 연산을 자동화하는 초기의 컴퓨터 설계 목적에 따라
8BIT 컴퓨터가 완성된 이후,
사용자는 보다 편리하게 컴퓨터를 활용하기 위해
어셈블리어(Assembly Language)와
입출력장치(키보드, 모니터)를 도입했다.
이후 컴퓨터는 어떻게 활용되었는가 보았을 때
단순 산술 논리 연산 장치를 넘어
데이터 저장과 관리의 효율성을 높이는 방향으로 발전했다.
이러한 변화 과정에서
BIOS와 운영체제 그리고
고급 프로그래밍 언어가 탄생하게 되었다.
그렇다면 왜 BIOS와 운영체제 그리고
고급프로그래밍언어가 필요해졌을까?
그 이유와 함께 이들은 어떠한 기능을 하고, 어떻게 구현되는지
BIOS는 다시 한번 더 직관적으로 살펴보고,
운영체제와 고급 프로그래밍언어에 대해 탐구해 보고자 한다.
< BIOS에서 운영체제 그리고
고급 프로그래밍 언어의 필요성과 기능 >
< BIOS (기본 입출력 시스템)의 필요성과 기능 >
[1] 하드웨어 초기화
컴퓨터를 켜면 CPU는 특정한 메모리 주소에서
명령어를 가져와 해석하기 시작한다.
그러나 RAM은 전원을 껐다 켜면
데이터가 모두 지워지는 회로적 특성이 있다.
따라서 컴퓨터가 처음 켜질 때에는
RAM에 의미 없는 쓰레기 값(garbage data)들이 포함될 수 있으며
이런 상태에서 만약 CPU가 실행을 시작하면
이상한 명령어를 수행할 수 있기 때문에
이러한 문제를 방지하고자 하드웨어를 초기화하고
정상 동작 여부를 점거하는 역할을 BIOS가 수행한다.
※ 현대의 컴퓨터에서는 BIOS가 UEFI(Unified Extensible Firmware Interface)로 대체되었지만, 여전히 BIOS라는 개념이 사용되고 있다.
[2] 부팅 과정의 자동화
초기 8BIT 컴퓨터에서는 사용자가 직접 키보드를 입력하거나, 특정한 버튼을
눌러야만 프로그램을 실행할 수 있었다. 하지만 컴퓨터가 발전하면서,
전원을 켜면 자동으로 운영체제라는 프로그램이 실행되도록 하는 방식이 필요했다.
하지만 운영체제는 대부분 보조기억장치(CD, SSD, HDD)등에 저장되어 있으며
전원이 켜졌을 때는 CPU는 운영체제가 어디에 저장되어 있는지 알지 못한다.
그래서 BIOS는 부팅과정에서 기본적인 하드웨어를 초기화하고,
부트로더를 실행하여
저장장치(HDD, SSD, CD 등)에 저장된 운영체제 코드를
RAM으로 복사하여 실행할 수 있도록 돕는다.
이를 통해 사용자가 일일이 명령어를 입력하지 않아도
자동으로 운영체제를 실행할 수 있다.
[3] 기본적인 입출력 지원
BIOS는 운영체제가 실행되기 전까지 키보드 입력을 받을 수 있도록 하고,
화면에 기본적인 텍스트를 출력할 수 있도록 지원한다.
즉, 최소한의 입출력 환경을 제공하여 운영체제가 정상적으로 실행될 수 있도록 한다.
BIOS에 대하여 좀 더 자세한 내용은 이전 글을 따른다.
[컴퓨터][34] BIOS (Basic Input/Output System)
※ 해당 게시글은 주제를 탐구하면서 주관적인 생각을 정리 한 글입니다.이전 글들을 통해 파악하였듯이초기의 컴퓨터는 단순히 산술논리 연산을 자동화하기 위해 설계되었다.하지만 연
core-basic.tistory.com
< 운영체제(Operating System)의 필요성과 기능 >
초기 컴퓨터에서는 한 번에 하나의 프로그램만 실행할 수 있었고,
또, 사용자가 직접 메모리 주소를 지정하고,
저장장치에서 데이터를 불러오는 등
모든 작업을 수동으로 처리해야 했다.
하지만 컴퓨터가 점점 발전하면서
여러 프로그램을 동시에 실행할 필요성,
메모리와 저장장치의 체계적인 관리,
입출력 장치와의 원활한 연결 등의 필요성이 커지게 되었고
이러한 문제를 해결하기 위해 운영체제(OS)가 도입되었다.
운영체제의 기능은 크게 커널(Kernel Space) 공간과
사용자 공간(User Space)으로 나뉜다.
커널은 운영체제를 만들기 위한 최소한의 기능이자
핵심 코드(모듈)들이 포함되어 있는 집합체이다.
커널이 아닌 부분은 User Sapce(사용자 공간)으로
파일 탐색기, 셸(shell), 네트워크 설정 같은 기능(모듈)들이 포함된 집합체이다.
[1] 커널 공간(Kernel Space)
커널은 운영체제의 핵심 기능 코드들이 담겨있는 프로그램이다.
1-1. 파일 시스템 관리
앞서 언급하였듯이
사용자가 제작한 프로그램을 저장하고 실행할 때마다
사용자가 직접 SSD/HDD, RAM의 메모리 주소를 입력하는 것은
매우 불편했다.
그래서 운영체제는 “파일 시스템”을 제공하여,
“파일”이라는 개념을 도입해
프로그램과 데이터를 파일 단위로 저장하고 관리할 수 있도록 하였다.
예) 문서를 저장할 때 파일 시스템을 통해 디스크에 기록
1-2. 메모리 할당 및 관리
운영체제가 없는 경우 프로그램을 실행할 때
메모리 주소를 직접 지정해야 했다.
하지만 운영체제가 도입되면서 프로그램이 실행될 때
자동으로 적절한 메모리 공간을 할당해 주고,
프로그램이 종료되면 해당 공간을 정리하는 기능을 사용할 수 있게 되었다.
예) 웹 브라우저를 열면 메모리를 할당하고, 브라우저를 닫으면 해제
1-3. 멀티태스킹 및 프로세스 관리
또한, 운영체제가 없는 경우
컴퓨터에서는 한 번의 하나의 프로그램만 실행할 수 있었다.
하지만, 운영체제가 도입되어 CPU시간을 적절히
분배하는 기능을 통해 여러 프로그램을 동시에 실행할 수 있게 되었다.
예) 게임과 음악 재생 프로그램을 동시에 실행할 때, CPU가 어느 프로그램을 실행할지 조절
1-4. 장치 드라이버 및 하드웨어 관리
BIOS에서 제공하는 기본적인 입출력 기능을 이어받아,
키보드, 모니터, 마우스, 프린트 등의 장치와 통신하는 기능을 제공한다.
예) 키보드를 눌렀을 때 문자가 화면에 나타나는 과정
1-5. 시스템 호출 인터페이스(System Call Interface)
사용자 프로그램이 커널 기능을 사용할 수 있도록
중간 다리 역할 수행(API 제공)
예) C언어에서 printf()를 호출하면, 결국 커널이 System Call 기능을 이용해 화면에 출력하는 작업을 수행한다.
1-6. 보안 및 권한 관리
시스템에 대한 접근을 제어하고, 사용자의 권한을 관리하여,
시스템 자원에 대한 보호를 제공하며, 악성 코드나 불법적인 접근을 막는다.
[2] 사용자 공간(User Sapce)
커널이 하드웨어와 밀접한 필수 기능을 담당한다면,
사용자 공간은 주로 사용자의 편의성을 높이는 코드들이다.
2-1. 유저 인터페이스(UI, User Interface)
초기 컴퓨터는 명령어를 입력해야만 프로그램을 실행할 수 있었지만,
운영체제가 GUI(그래픽 사용자 인터페이스)를 제공하면서
마우스로 아이콘을 클릭하는 것만으로도 프로그램을 실행할 수 있도록 하였다.
예) 마우스로 아이콘을 클릭해서 프로그램을 실행하는 기능
2-2. 시스템 라이브러리(System Libraries)
운영체제가 제공하는 기본적인 프로그래밍 라이브러리
예) glibc (Linux의 기본 C 라이브러리), msvcrt.dll (Windows의 C 런타임 라이브러리)
2-2. 시스템 유틸리티
파일 탐색기, 작업관리자, 터미널 등 기본프로그램 제공
예) Windows의 파일 탐색기등을 통해 명령어 없이 파일을 이동 가능
2-3. 셸(Shell)
사용자가 명령어를 입력할 수 있도록 해주고,
해석해 주는 명령어 인터페이스
예) Windows의 cmd.exe, Linux의 bash, zsh
2-4. 네트워크 서비스
인터넷 연결, 파일 공유, 원격 접속 등의 기능 제공
예) TCP/IP를 통해 컴퓨터 간 통신 가능.
2-5. 응용프로그램(Application Programs)
운영체제 위에서 실행되는 일반 프로그램
예) 웹 브라우저, 게임, 오피스 프로그램, 미디어 플레이어
이어서 위와 같이 커널과 사용자 공간을 따로
분리한 이유는 다음과 같다.
(1) 안정성 보장
운영체제는 계속해서 실행되어야 하지만,
UI나 유틸리티 프로그램은 오류로 인해 종료될 수도 있다.
그래서 커널은 안정적으로 작동해야 하며,
외부 프로그램이 직접 접근할 수 없도록 보호한다
(2) 보안 강화
만약 모든 프로그램이 운영체제의 핵심 기능을 직접 변경할 수 있다면,
악성 프로그램이 시스템을 망가뜨릴 수도 있다.
그래서 커널은 사용자가 직접 수정할 수 없는 영역(커널 모드)에서 실행되고,
일반 프로그램은 사용자 모드에서 실행되도록 설계된다.
(3) 성능향상
커널은 컴퓨터의 핵심 기능을 담당하기 때문에
최대한 빠르게 동작해야 한다.
UI나 기타 프로그램이 버벅거려도, 커널이 정상적으로 동작하면
시스템 전체가 멈추지는 않는다.
< 고급 프로그래밍 언어와 컴파일러의 필요성과 기능 >
초기 8BIT 컴퓨터에서는
사용자가 직접 어셈블리어 코드를 작성하여 프로그램을 제작하고,
이를 기계어로 변환하여 CPU가 실행하도록 해야 했다.
그러나 이 과정은 매우 번거로웠고, 프로그래밍의 난도가 높았다.
이러한 문제를 해결하기 위해
고급 프로그래밍 언어와 컴파일러가 도입되었다.
이에 따라 우선
고급 프로그래밍 언어의 필요성 및 기능을 살펴보면 다음과 같다.
[1] 고급 프로그래밍언어
1-1. 편리한 코드 작성 및 효율적인 유지보수
예를 들어 다음과 같은 어셈블리어를 C언어로 표현한다면 더 직관적이고 이해하기 쉽다.
[어셈블리어] MOV AX, 1234h MOV BX, 5678h ADD AX, BX |
[C언어] int a = 0x1234; int b = 0x5678; int c = a + b; |
1-2. 다양한 하드웨어에서 실행가능한 호환성
어셈블리어는 특정 CPU 아키텍처에 종속적이라는 한계점이 있다.
하지만 C, Python과 같은 고급 언어는 다양한 CPU에서도
실행할 수 있도록 설계되었다.
1-3. 복잡한 프로그램 개발
게임, 웹 브라우저, 데이터베이스 등 복잡한 프로그램을 개발하기 위해서는
수많은 어셈블리어 코드를 작성해야 한다.
하지만 고급 언어를 사용하면 같은 프로그램을 보다 쉽게 개발할 수 있다.
[2] 컴파일러
운영체제와 고급 언어가 등장하면서,
프로그래머들은 기계어를 직접 다룰 필요가 없어졌다.
하지만 컴퓨터는 여전히 기계어(0과 1로 이루어진 코드)만 이해할 수 있다.
이에 따라 컴파일러는
고급 프로그래밍 언어로 작성된 코드를 기계어로 변환하는 역할을 수행한다.
2-1. 고급 언어 기계어로 변환
프로그래머가 C, Python 같은 고급 언어로 코드를 작성하면,
컴파일러는 해당 코드를 분석하여
코드 전체를 CPU가 이해할 수 있는 기계어(바이너리 코드)로 변환하여
실행파일을 생성한다.
2-2. 최적화
실행 속도를 높이기 위해 최적화를 수행한다.
예) 반복되는 계산은 제거하여 성능을 향상한다.
2-3. 오류 검사
프로그램 실행 전에 문법 및 논리 오류를 점검한다.
예) 컴파일과정에서 오류 발생 시 에러 메시지를 출력한다.
[3] 인터프리터
인터프리터는 컴파일러와 같이 고급 언어를
기계어로 변환해 주는 기능을 가지고 있지만,
컴파일러와 다르게 코드를 한 줄씩 해석하여 실행한다.
(Python 같은 언어에서 사용)
BIOS, 운영체제, 고급 프로그래밍 언어는
컴퓨터의 효율성과 사용자 경험을 개선하는 중요한 기술적 요소들이다.
BIOS는 하드웨어 초기화 및 부팅을 담당하고,
운영체제는 프로그램 실행을 위한 환경을 제공하며,
고급 프로그래밍 언어와 컴파일러는
소프트웨어 개발을 더욱 쉽고 효과적으로 만들어 준다.
이들의 발전이 곧 현대 컴퓨터의 발전을 이끌었다.
다음 주제부터는
운영체제, 컴파일러에 대해
각 기능을 어떻게 구현하는지
단계적, 그리고 구체적으로 탐구해 보겠다.
또한, 고급 프로그래밍 언어는 고급 프로그래밍 언어의
특징 및 패턴을 파악하면서
C언어에 대한 카테고리를 별도로 생성하여 C언어에 대해 탐구해 보겠다.
※ 해당 게시글은 주제를 탐구하면서 주관적인 생각을 정리 한 글입니다.
'[無에서 시작하는 컴퓨터&과학]' 카테고리의 다른 글
[컴퓨터][34] BIOS (Basic Input/Output System) (1) | 2025.02.26 |
---|---|
[컴퓨터][33] 비휘발성 저장 장치 - 3 (Solid-State Drive , SSD) (0) | 2025.02.20 |
[컴퓨터][32] 비휘발성 저장 장치 - 2 (자기 테이프, 플로피 디스크, 하드 디스크:HDD) (0) | 2025.02.12 |
[컴퓨터][31] 비휘발성 저장 장치 - 1 (전자기학 기초 및 자기 와이어 레코딩:magnetic wire recording, 녹음기) (0) | 2025.02.02 |
[컴퓨터][30] 입출력(I/O) 장치 : 모니터의 원리 (0) | 2024.12.29 |