티스토리 뷰

AI/CS

[CS] 컴퓨터개론

brave_sol 2025. 3. 18. 11:50

1. 컴퓨터 구조

- 제한된 환경에서 효율적으로 동작하는 프로그램을 만들어야 하기에 컴퓨터의 구조를 알아야 함

- [CPU, 주기억장치(메모리)]-컴퓨터의 성능에 중요, 보조기억장치, 입출력장치

 

2. 언어

- 기계어: 2진수

- 어셈블리어: 기계어와 일대일로 대응되는 프로그래밍 언어, 어셈블리어를 기계어로 번역해주는 것이 어셈블러

- 고급언어: 사람이 이해하기 쉽게 작성된 프로그래밍 언어, 고급언어를 어셈블리어로 번역해주는 것이 컴파일러

- 컴퓨터는 트랜지스터(스위치)로 구성됨. 트랜지스터는 전기적 신호를 디지털 신호(0과1)로 변환하고 논리연산을 수행

 

1) C언어 코드 실행과정

# C언어 코드 실행 과정

1. 소스 코드 작성(.c)
2. 전처리(#include, #define 같은 전처리 지시문 처리, 주석 제거 등)
3. 컴파일(C코드를>어셈블리어로 변환 .s)
4. 어셈블(어셈블리어>기계어 .o로 변환(이진코드), 실행X)
5. 링크(여러개의 .o 파일을 연결해 실행파일 a.out 등 생성)
6. 실행(생성된 파일을 실행)

# 6번이 실행되는 과정
1. 운영체제가 실행 파일을 로드
2. 프로그램이 메모리(RAM)에 적재됨- OS가 코드영역, 데이터영역, 힙, 스택등을 설정
3. CPU가프로그램 실행 (main 함수부터 실행 시작)
4. 프로그램 종료- 실행이 끝나면 OS가 메모리 정리

*운영체제: CPU를 관리하고 프로그램 실행을 제어
* CPU: OS의 명령을 받아 프로그램 실행

 

2) Python 코드 실행과정

# Python 코드 실행 과정

1. 소스 코드 작성
2. 인터프리터 실행
3. 컴파일(소스코드 > 바이트코드)
4. 바이트코드 실행 (python 가상머신 PVM, 실제로 CPU에서 실행되기 전에 기계어로 변환되어 실행)

 

3) 바이트코드 vs 기계어

- 바이트코드: 사람이 이해할 수 없지만 기계어와 다름, Python 인터프리터가 해석할 수 있는 중간 코드

- CPU가 직접 실행하지 못하고 PVM이 해석하여 실행

 

4) 기계어 

- 0과1로 구성된 CPU가직접 실행하는 코드

-C,C++같은 언어에서 컴파일러가 기계어로 변환

 

3. 기억장치

- 데이터와 명령어를 저장하는 장치로, 속도와 용도에 따라 여러 계층으로 구분

- 레지스터로 갈수록 CPU에 가까워짐

* CPU(중앙처리장치)란? 컴퓨터의 두뇌 역할을 하며, 명령어를 해석하고 연산을 수행하는 장치

종류 속도 용량 가격
레지스터 빠름 작음 비쌈
캐시


주기억장치
보조기억장치 느림 저렴

 

1) 주기억장치

- 현재 실행되고 있는 데이터와 명령어를 저장

ROM(Read-Only Memory) RAM(Random Access Memory)
읽기만 가능 읽기 쓰기가 자유롭게 가능
컴퓨터를 구동하기 위한 기본적인 데이터 많은 애플리케이션을 실행할수록 더 많은 메모리가 필요
전원이 꺼져도 데이터가 사라지지 않는 비휘발성 메모리 전원이 꺼지면 데이터가 사라지는 휘발성 메모리
처리 속도가 느림 처리 속도가 빠름
가격이 쌈 가격이 비쌈

- BIOS(부팅): ROM에 저장되어있음

 

2) 메모리 주소

- 컴퓨터는 메모리에 저장된 데이터를 주소를 참조해서 데이터를 식별함

 

4. CPU

- 프로세서, 데이터와 명령을 처리하는 제어 장치, 클럭과 코어가 CPU 성능을 결정

1) 클럭(Clock, 클럭속도)

- CPU가 1초 동안 실행할 수 있는 연산 횟수를 나타내는 단위(Hz)

- 일정한 정기적 주파수에 따라 작업을 수행, 클럭이 클수록 주파수가 빠르고 CPU 연산속도가 더 빠름

- 예: 3.0GHz CPU는 1초에 30억 번의 연산 수행 가능

 

2) 코어

- CPU 내부의 독립적인 연산 유닛으로, 코어 수가 많을수록 여러 작업을 동시에 실행(싱글코어, 듀얼코어 등 멀티코어..)

 

3) CPU의 구성

- 산술 논리 연산 장치(ALU), 레지스터(CPU가 처리할 데이터를 기억), 제어장치

- 각 요소들은 시스템버스로 연결되어 있음

 

4) 논리연산

- 1 참, 0 거짓

- 논리곱(and), 논리합(or), 부정(not)-두 논리값이 다를때 1, 같으면 0

 

5) 산술 논리 연산 장치

- 다양한 산술 연산을 계산하는 디지털 회로

- 가산기(Adder) 덧셈 연산을 수행하는 논리 회로

- 보수기(Complementor) : 2의 보수(음수)를 계산해주는 논리 회로

*  논리 회로란? 불 대수를 이용한 입력 값에 대한 논리연산을 수행해 출력

 

6) 레지스터

- CPU가 처리할 데이터를 일시적으로 보관하는 기억 장치

- 스택포인터: 프로그램의 실행을 관리하는 스택의 흐름 제어(현재 스택의 최상단을 가리키는 레지스터, 메모리 주소 저장)

- 누산기: 계산 결과 저장

- 상태 레지스터: 연산 결과 나오는 오버플로우(저장할 수 있는 자리수를 넘긴 경우,3자린데 1000), 부호(+/-), 캐리(자리수 바뀜) 등 상태 저장

- 인덱스 레지스터: 데이터가 저장되어 있는 주소 저장

 

7) 제어장치- 처리할 명령어를 해독, 실행하며 CPU의 전체적인 흐름 제어

- 프로그램 카운터: 다음에 실행할 명령어 주소를 기억하는 레지스터

 

5. 입출력 장치

- 사용자가 원하는 데이터와 명령어를 컴퓨터에 전달하는 입력 장치와, 컴퓨터가 사용자에게 결과를 보여주기 위한 출력장치

- 예: 조이스틱, 스피커, 프린터

 

6. 보조기억장치

- 전원이 꺼지면 데이터가 사라지는 주기억장치의 단점을 보완한 기억장치, 용량이 크고 주기억장치에 비해 저렴하지만 느림

- 예: HDD, SSD, CD-ROM, USB

 

7. 시스템 버스

- 컴퓨터 시스템 내에서 신호를 전송하는 경로

- CPU, Memory, 입출력장치 등 모든 장치는 시스템 버스를 통해 데이터를 주고 받음

1) 제어버스: 제어 신호 전송에 사용

2) 주소버스: 메모리나 입출력장치의 주소 전송에 사용

3) 데이터버스: 데이터 전송에 사용

 

8. 메인보드

- 컴퓨터 장치들은 메인보드에 있는 시스템 버스를통해 서로 연결되어 있음(마더보드)

 

9. 전체 동작 흐름

- input → CPU → output 

- 입력 장치로 데이터와 명령어를 입력 받음
- CPU에서 레지스터 및 산술 논리 여산 장치를 통해 명령어를 처리

- 처리된 결과는 메모리에 저장하거나 출력 장치를 통해 출력

 

10. CPU 동작 흐름

- Fetch(인출) : CPU가 명령어를 가져옴(명령어를 가리키는 주소는 프로그램 카운터에서 가져옴)

- Decode(해석): 가져온 명령어 해석 

- Execute(실행): 레지스터와 산술논리연산장치를 이용해 연산, 메모리에 있는 데이터를 읽거나 쓰는 작업

 

11. 운영체제(OS)

- 하드웨어와 소프트웨어를 관리하고 제어하는 소프트웨어

- 컴퓨터의 자원(resource)을 효율적으로 관리해주는 프로그램

- 왜 알아야 할까? 프로세스와 메모리를 이용하는 프로그램을 잘 만들기 위해서

* 하드웨어: 컴퓨터 시스템에 물리적으로 존재하는 모든 부품

** 소프트웨어: 사용자의요구에 따라 컴퓨터 시스템에서 작동하는 프로그램

*** 리소스: 컴퓨터가 동작하기 위해 필요한 모든 것들(CPU, 메모리 등 컴퓨터 시스템 내에 존재하는 물리적 부품)

 

1) 소프트웨어

- 응용 소프트웨어: 특정 작업을 수행하기 위해 설치하는 소프트웨어(웹브라우저, 워드프로세서,스프레드시트, 게임 등)

- 시스템 소프트웨어: 하드웨어와 상호작용하며 컴퓨터 시스템을 관리해주는 소프트웨어(운영체제, 컴파일러, 인터프리터)

 

2) 운영체제의 역할

- 메모리 관리(프로그램이 실행될때 메모리에서 사용할 공간(주소)을 할당하고 관리)

- 프로세스 관리: 프로세스가 실행되는 순서를 관리(프로세스 스케줄링=> 멀티태스킹 가능)

- 네트워크 자원관리

- 파일과 디렉터리를 생성, 복사, 삭제하는 파일 시스템 관리

- 입출력 장치의 관리를 통한 입출력 작업

- 사용자 인증, 방화벽 등 보안 및 인증

 

* 가상메모리: 프로그램이 실제로 실행되는 부분만 메모리에 저장하여, 물리적인 메모리의 크기보다 큰 프로그램을 실행할 ** 페이징: 가상메모리와 실제메모리를 관리하는 기법 중 하나

 

12. 프로세스

- 운영체제에 의해 실행 중인 프로그램,운영체제로부터 자원(CPU, 메모리 등)을 할당 받아 실행 됨

* 프로그램: 명령어가 실행되는 순서의 집합

 

13. 스레드
- 프로세스 내에서 실행되는 작업의 단위

- 하나의 프로세스는 하나 이상의 스레드로 이루어져 있음
1) 싱글 프로세스: 하나의 프로세스

2) 멀티 프로세스: 여러 개의 프로세스가 독립적인 메모리 공간에서 실행

3) 싱글 스레드: 하나의 작업을 완료할 때까지 다른 작업을 수행하지 않음

4) 멀티 스레드: 여러 개의 스데르가 동시에 작업을 수행

 

14. 운영 체제의 구성

(하드웨어>커널>쉘|여기까지가 운영체제)>애플리케이션(응용s/w)는 커널과 쉘을 통해 하드웨어에 접근함

 

1) 커널
- 하드웨어와 소프트웨어간의 인터페이스

- 프로세스 순서를 관리해 자원관리(두 개의 프로세스가 동시에 자원에 접근했을 때 발생할 수 있는 동기화 문제를 관리)

- 프로세스 스케줄링, 메모리관리, 입출력제어 등 운영체제의 핵심 기능 담당

- 커널은 CPU, Memory, Devices등 운영 체제의 핵심 기능을 담당 > Kernel > Applications

 

2) 셸

- 커널과 사용자 간의 인터페이스

- 사용자가 입력한 명령어를 해석하여 커널에 전달하고, 커널이 실행한 결과는 사용자에게 출력

- bash, cmd 등

 

15. 리눅스

- 오픈소스로 코드를 무료로 공개하고 있어 코드에 대한 접근이 자유로움

* 오픈소스: 소스코드를 특별한 제한 없이 접근할 수 있도록 공개하여, 누구나 코드를 사용, 수정, 배포할 수 있도록 만든 sw

 

1) 리눅스를 기반으로 배포된 다른 여러 운영체제들이 많다

- debian, ubuntu, redhat 등

 

2) 리눅스를 알아야 하는 이유

- 안정적인 운영체제로 개발 서버로 사용되는 비중이 높음

- 클라우드 컴퓨팅 환경에서 많이 사용되고 있음

- 많은 개발자 도구와 환경을 제공

* 클라우드 컴퓨팅: 데이터를 저장하고 처리하는데 필요한 컴퓨팅 리소스를 실제 컴퓨터가 아닌 인터넷을 통해 제공

 

3) GUI(Graphic User Interface)

- 사용자가 편리하게 사용할 수 있도록 입출력 등의 기능을 알기 쉬운 아이콘과 같은 그래픽으로 나타냄

 

4) CLI(Command Line Interface)

- 터미널에서 명령어를 사용하여 컴퓨터 시스템과 상호작용 하는방식

* 터미널: CLI 기반으로 사용자 인터페이스를 제공하는 프로그램으로, 텍스트 기반으로 사용자가 컴퓨터와 상호작용 할 수 있도록 함

 

5) CLI를 사용하면 GUI보다 리소스를 적게 사용해 자원을 아낄 수 있고, 안정적이고 빠름

 

6) 윈도우 사용시 WSL을 이용해서 Ubuntu를 설치!

반응형

'AI > CS' 카테고리의 다른 글

[CS] 운영체제  (0) 2025.03.23
[CS] 네트워크  (0) 2025.03.18
[CS] 리눅스  (0) 2025.03.18
[CS] IT 리터러시  (0) 2025.03.17
[CS] 알고리즘 - 그리디  (0) 2025.03.05
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함