✅ 컴퓨터 구조
- 컴퓨터는 하드웨어와 소프트웨어가 합쳐진 형태
- 하드웨어 : 전자 회로 및 기계 장치로 되어 있어 입출력 장치, 중앙처리장치(CPU), 기억 장치 등으로 구성
- 소프트웨어 : 하드웨어 위에서 하드웨어를 제어하며 작업을 수행하는 프로그램
✅ 컴퓨터의 기본 구성 요소

컴퓨터는 입력 장치, 출력 장치가 갖춰져 있고, 내부에는 연산을 위한 CPU(중앙처리장치), 저장을 하기 위한 주 기억장치와 보조 기억 장치를 가지고 있다.
입력 장치
- 입력 장치는 컴퓨터가 처리할 수 있는 형태로 데이터와 명령을 받아들이는 물리적인 장치
- 입력 장치에는 다양한 물리적인 장치가 존재. 기본적으로 키보드와 마우스에서부터, 스캐너와 타블렛, 혹은 조이콘 같이 컴퓨터에 연결하여 무언가를 입력할 수 있는 장치를 입력 장치라 칭함.
중앙 처리 장치(CPU)
- CPU의 내부 구성은 산술/논리 연산 장치(ALU)와 제어 장치, 레지스터로 구성
- 산술은 덧셈을 수행하는 것, 제어 장치는 프로그램에 따라 명령과 제어 신호를 생성하여 각종 장치의 동작을 제어
- 레지스터는 CPU의 내부 메모리로서 CPU에서 사용하는 데이터를 일시적으로 저장하는 장소
저장 장치
- 데이터나 프로그램을 보관하기 위한 일차 기억 장치인 주 기억 장치(Memory)
- 주 기억 장치를 보조하기 위한 디스크와 시디 같은 보조 기억 장치가 존재
- 주 기억 장치는 주로 정보를 저장해 두었다가 필요할 때 읽어들이는 저장소로 사용(RAM과 ROM이 존재)
RAM (Random Access Memory):
1. RAM은 일시적인 데이터 저장 공간으로, 컴퓨터가 작동 중일 때 프로그램과 데이터를 저장합니다.
2. RAM은 읽기 및 쓰기가 가능한 메모리로, 저장된 데이터는 쉽게 변경될 수 있습니다.
3. RAM은 휘발성 메모리입니다. 이는 전원이 꺼지면 저장된 데이터가 사라진다는 것을 의미합니다.
4. RAM은 데이터에 빠르게 액세스할 수 있어, CPU가 더 빠른 속도로 작업을 수행할 수 있도록 합니다.
5. 주요 RAM 유형에는 DRAM (Dynamic RAM)과 SRAM (Static RAM)이 포함됩니다.
ROM (Read-Only Memory):
1. ROM은 영구적인 데이터 저장 공간으로, 컴퓨터의 기본적인 시작 프로세스와 같은 중요한 시스템 데이터를 저장합니다.
2. ROM은 읽기 전용 메모리로, 저장된 데이터는 쉽게 변경되지 않습니다. 일반적으로 제조 과정에서 데이터가 적재됩니다.
3. ROM은 비휘발성 메모리입니다. 이는 전원이 꺼져도 저장된 데이터가 유지된다는 것을 의미합니다.
4. ROM은 데이터에 액세스하는 속도가 RAM보다 느리지만, 필수 시스템 정보를 보관하는 데 필수적입니다.
5. 주요 ROM 유형에는 PROM (Programmable ROM), EPROM (Erasable Programmable ROM), 및 EEPROM (Electrically Erasable Programmable ROM)이 포함됩니다.
🤔 RAM은 컴퓨터가 작동 중일 때 데이터와 프로그램을 일시적으로 저장하는 데 사용되며, ROM은 컴퓨터의 기본적인 시작 프로세스와 같은 중요한 시스템 데이터를 영구적으로 저장하는 데 사용된다.
✅ CPU
- 컴퓨터 시스템을 이루는 구성 요소로 CPU, 주 기억 장치인 메모리 그리고 보조 기억 장치인 디스크와 씨디 등
- 앞썬 구조에 I/O(입출력장치)까지 추가 된다면 컴퓨터를 이루는 기본 골격
- 이런 구조를 제안한 사람은 "폰 노이만"
✅ CPU의 구조
- CPU의 내부 구성은 크게 산술/논리 연산 장치(ALU), 제어 장치와 레지스터로 구성
- 산술은 덧셈을 수행하는 것이고, 제어 장치는 시그널을 통해 데이터 흐름을 통제하는 것
- 레지스터는 CPU 내부의 메모리

산술 논리 연산 장치(ALU)
- 산술 논리 연산 장치는 산술적인 연산과 논리적인 연산을 담당하는 장치
- 가산기, 보수기, 누산기, 기억 레지스터, 데이터 레지스터 등으로 구성
- 캐시나 메모리로부터 읽어 온 데이터는 레지스터라는 CPU 전용의 기억장소에 저장
- ALU는 저장된 데이터를 이용하여 덧셈, 곱셈 등과 같은 산술 연산을 수행
레지스터(Register)
- 레지스터는 CPU 내부에 있는 기억 장치
- 산술 연산, 논리 장치에 의해 사용되는 범용 레지스터와 PC 등 특수 목적에 사용되는 전용 레지스터로 구분 가능
- 레지스터의 종류
- IR (Instruction Register) : 현재 수행 중에 있는 명령어 부호를 저장하고 있는 레지스터
- PC (Program Counter) : 명령이 저장된 메모리의 주소를 가리키는 레지스터
- AC (Accumulator) : 산술 및 논리 연산의 결과를 임시로 기억하는 레지스터
제어장치(Control Unit, CU)
- 제어 장치는 CPU가 자신 및 주변 기기들을 컨트롤하는 장치
- 프로그램의 수행 순서를 제어하는 프로그램 계수기(program counter)
- 현재 수행중인 명령어의 내용을 임시 기억하는 명령 레지스터(instruction register)
- 명령 레지스터에 수록된 명령을 해독하여 수행될 장치에 제어 신호를 보내는 명령 해독기(instruction decoder)
제어 장치 구현 방식
- Hardwired
- 제어신호가 Hardwired Circuit 에 의해서 생성 되도록 하드웨어 구성하며 상태계수기와 PLA(Programmable Logic Array ) 회로로 구성
- 고속 처리, 고가
- RISC 시스템에 적용
- Micro Program
- 발생 가능한 제어 신호들의 조합을 미리 구성하여 ROM 에 저장했다가 필요 시 신호를 발생시키는 Software 방식
- 하드웨어 방식에 비해 속도도 낮고 가격도 저렴
- CISC에 적용
CPU의 기능
- CPU의 기능은 명령어와 데이터에 관련이 있다.
- 명령어 인출 및 해독은 모든 명령어들에 대하여 공통적으로 수행하며 기억 장치로부터 명령어를 읽어옵니다.
- 데이터 인출 및 처리, 쓰기와 같은 것들은 명령어에 따라 필요할 때만 수행
- 명령어 및 명령어 수행 과정과 처리 방식은 CPU에서 중요한 부분을 차지하고 있습니다.
명령어
- 명령어는 시스템이 특정 동작을 수행 시키는 작은 단위
- 명령어는 코드로 구성, 동작코드(Op-code : Operational Code)와 오퍼랜드(Operand)로 구성
- 동작 코드(Op-code): 각 명령어의 실행 동작을 구분하여 표현
- 오퍼랜드(Operand): 명령어의 실행에 필요한 자료나 실제 자료의 저장 위치를 의미
명령어 수행 과정

- 읽기(Fetch Instruction, FI): 메모리에서 명령을 가져옵니다.
- 해석(Decode Instruction, DI): 명령을 해석합니다.
- 실행(Execute Instruction, EI): 명령을 수행합니다.
- 기록(Write Back, WB): 수행한 결과를 기록합니다.
명령어 처리 방식
- RISC : 컴퓨터 내부적으로 사용하는 명령어 세트를 단순화 시켜서 처리하는 형태의 구조, 단순한 명령을 조합해서 하나의 기능을 수행
- 하나의 사이클로 명령어를 처리합니다.
- 메모리 Load / Store 명령만 처리하는 방식입니다.
- 파이프라이닝, 슈퍼스칼라의 사용이 가능합니다.
- 복잡한 컴파일러 구조를 갖고 있습니다.
✅ 운영체제
하드웨어에게 일을 시키는 주체!
운영체제의 목적 및 기능
운영체제의 목적은 처리 능력 향상, 사용 가능도 향상, 신뢰도 향상, 반환 시간 단축 등에 있다.
- 프로세서, 기억장치, 입출력장치, 파일 및 정보 등의 자원을 관리
- 자원을 효율적으로 관리하기 위해 자원의 스케줄링 기능을 제공,
- 스케줄링 이란? 어떤 자원을 누가, 언제, 어떤 방식으로 사용할지를 결정해주는 것
- 사용자와 시스템 간의 편리한 인터페이스를 제공
- 시스템의 각종 하드웨어와 네트워크를 관리하고 제어
운영 체제의 시스템 자원 관리
운영체제가 없다면, 응용 프로그램이 실행될 수 없다.
응용 프로그램은 컴퓨터를 이용해 다양한 작업을 하는 것이 목적이고, 운영 체제는 응용 프로그램이 하드웨에게 일을 시킬 수 있도록 도와줌.
- 하드웨어를 구성하는 일을 하는 CPU, 자료를 저장하는 RAM, 디스크 등의 시스템 자원을 관리하는 주체가 바로 운영체제.
- 프로세스 관리(CPU)
- 메모리 관리
- I/O(입출력) 관리 (디스크, 네트워크 등)
응용 프로그램 관리
- 응용 프로그램이 실행되고, 시스템 자원을 사용할 수 있도록 권한과 사용자를 관리합니다.
응용 프로그램 : 운영체제를 통해 컴퓨터에게 일을 시키는 것
- 응용 프로그램이 운영체제를 통해 컴퓨터에게 일을 시키려면, 컴퓨터를 조작할 수 있는 권한을 운영체제로부터 부여받아야 한다.
- 응용 프로그램이 운영체제와 소통하기 위해서는, 운영체제가 응용 프로그램을 위해 인터페이스(API)를 제공해야 합니다.
- 응용 프로그램이 시스템 자원을 사용할 수 있도록, 운영체제 차원에서 다양한 함수를 제공하는 것을 시스템 콜(System call)이라고 부릅니다.
✅ 프로세스
프로그램이 실행 중인 상태로 특정 메모리 공간에 프로그램의 코드가 적재되고 CPU가 해당 명령어를 하나씩 수행하고 있는 상태를 의미.
- 운영 체제에서는 프로세스를 사용하여 프로그램을 수행하게 되는데 실행 중인 하나의 애플리케이션을 프로세스라고 칭함.
- 사용자가 애플리케이션 실행
-> 어플리케이션으로부터 실행에 필요한 메모리 할당 애플리케이션의 코드 실행
-> 실행되는 애플리케이션을 프로세스라 칭함.
ex). 크롬 브라우저 두 개 실행 시, 두 개의 프로세스 생성.
- 하나의 애플리케이션은 여러 프로세스를 만들기도 함.
프로세스 구성 요소
프로세스의 구조체에는 프로세스마다 독립적으로 관리해야 하는 유저 메모리 영역이나 프로세스가 사용하는 각종 객체들의 포인터를 관리하는 핸들 테이블을 가지고 있습니다.
- 유저 메모리 영역 관리
- 프로세스 별 독립된 영역을 가지게 되는 곳은 유저 메모리 공간.
- 커널 메모리 공간의 경우 모든 프로세스가 공유하여 사용
- 프로세스 별로 독립적인 유저 메모리 영역을 관리하기 위해서 VAD라는 관리 테이블이 존재합니다.
- 핸들 테이블
- 프로세스에서 사용하는 모든 핸들에 대한 커널 객체 포인터 정보를 배열 형태로 가지고 있는 공간
- 프로세스가 종료하게 될 때 이 테이블의 정보를 참고여 이 프로세서에서 사용하고 있는 모든 커널 객체를 자동으로 반환
- 독립적인 메모리 공간
- 프로세스 단위로 관리되는 자원 중 가장 중요한 구별점은 가상 메모리.
- 페이징 기법을 이용하여 프로세스마다 별도의 고유한 메모리를 사용할 수 있게 하고 있습니다.(윈도우 경우)
프로세스 상태
- 실행(Run) : 프로세스가 프로세서를 차지하여 서비스를 받고 있는 상태
- 준비(Ready): 실행될 수 있도록 준비되는 상태
- 대기(Waiting): CPU의 사용이 아니라 입출력의 사건을 기다리는 상태
프로세서 VS 프로세스
프로세서와 프로세스는 엄밀히 다른 존재
프로세서(Processor)
프로세서는 하드웨어적인 측면과 소프트웨어적인 측면으로 나누어 볼 수 있다.
- 하드웨어적인 측면: 컴퓨터 내에서 프로그램을 수행하는 하드웨어 유닛으로, 중앙처리장치(CPU)를 의미하며 적어도 하나 이상의 ALU와 레지스터를 내장!
- 소프트웨어적인 측면 : 데이터 포맷을 변환하는 역할을 수행하는 데이터 처리 시스템을 의미. 워드 프로세서나 컴파일러 등이 여기에 속함.
프로세스(Process)
- 프로세스는 특정 목적을 수행하기 위해 나열된 작업의 목록을 의미.
- 메모리에 적재 되어 프로세서에 의해 실행 중인 프로그램을 프로세스라고 볼 수 있다.
✅ 스레드
스레드는 명령어 CPU를 통해서 수행되는 객체의 단위.
- 하나의 프로세스 내에는 반드시 1개 이상의 스레드가 존재
- 이러한 스레드는 같은 프로세스에 있는 자원과 상태를 공유

- 같은 프로세스 내에 있는 스레드는 같은 주소 공간에 존재하게 되며 동일한 데이터에 접근 가능
- 하나의 스레드가 수정한 메모리는 같은 메모리를 참조하는 스레드에 영향
ex) 하나의 스레드에서 오픈한 파일을 다른 스레드가 사용할 수 있다. 프로세스가 종료되면 그 프로세스에 속해있던 스레드도 함께 종료
스레드는 왜 필요한가?
- 하나의 프로세서 안에서 여러 개의 루틴을 동시에 수행하여서 수행 능력을 향상하려고 할 때
- 스레드를 사용하게 되는데, 독립적으로 수행하여 처리하려고 할 때 사용하게 된다.
ex) 워드 프로세서에서 사용자로부터 키보드 입력 받거나, 그래픽이나 UI를 그리고 문법 오류를 체크하는 등 워드 프로세서 내에서 "여러 요청들을 동시에 처리"해야 하는데 이때 필요!
스레드의 구성 요소
스레드는 가상 CPU, 수행 코드, 처리 데이터로 구성
- 가상 CPU : 인터프리터, 컴파일러에 의해 내부적으로 처리되는 가상 코드
- 수행 코드 : Thread Class에 구현되어 있는
run() Method 코드
- 처리 데이터 : Thread에서 처리하는 데이터
스레드의 특징
- 프로세스 내에서 실행되는 흐름의 단위
- 하나의 스레드는 시작해서 종료할 때까지 한번에 하나씩 명령들을 수행
- 각 스레드마다 call stack이 존재
- 나머지 Code, Data, Heap 영역은 스레드끼리 공유
- 반면에 프로세스는 다른 프로세스의 메모리에 직접 접근할 수 없다.
- 스레드는 다른 스레드와 "독립적"으로 동작
- 독립적으로 동작하기 때문에 두 개 이상의 스레드가 동작되는 경우, 두 개 이상의 스레드의 실행 및 종료 순서 예측 X
✅ 싱글 스레드와 멀티 스레드
스레드는 싱글 스레드와 멀티 스레드가 존재한다.

싱글 스레드(Single-Thread)
프로세스가 단일 스레드로 동작하는 방식
-> 일련의 처리를 단일 스레드만으로 직렬 처리하는 프로그래밍 방법.
- 하나의 레지스터, 스택으로 표현. JS가 가장 대표적인 싱글 스레드 언어