[TIL - 2022.10.04] 컴퓨터 공학

Jeong Ha Seung·2022년 10월 4일
0

부트캠프

목록 보기
47/51

CPU

중앙 제어 장치라고도 하며, 내부적으로 간단하게 보면 산술/논리 연산 장치, 제어 장치, 레지스터로 구성되어있다.

  • 산술: 말 그대로 산술 연산을 수행하는 것
  • 제어 장치: 프로그램 명령, 제어 신호를 생성해서 장치의 동작을 제어
  • 레지스터: CPU에서 사용하는 데이터를 일시적으로 저장하는 장소


ref. https://medium.com/geekculture/computer-architecture-15bfb3e3501e
https://kkgulati.medium.com/the-cpu-architecture-42a300102726

  • ALU(산술/논리 연산 장치) : 산술,논리 연산을 담당하는 장치로서, 보수기,누산기,기억 레지스터,데이터 레지스터로 구성된다.

레지스터

CPU 내부에 있는 장치로, 산술 연산에 사용되는 범용 레지스터와 PC나 특수 목적에 사용되는 전용 레지스터로 구분할 수 있다.

  • IR(Instruction Register) : 현재 진행되고 있는 명령어 부호를 저장하는 레지스터
  • PC(Program Counter) : 명령이 저장된 메모리 주소를 가리키는 레지스터
  • AC(Accumulator) : 산술 및 논리 연산 결과를 임시로 저장하는 레지스터

제어장치

CPU가 자신 혹은 주변 기기를 제어하는 장치.
프로그램 수행 순서를 제어하는 프로그램 계수기, 현재 수행중인 명령어 내용을 임시로 기억하는 명령 레지스터, 이 레지스터에 수록된 명령을 해독해서 수행될 장치에 제어신호를 보내는 명령해독기로 이루어져 있다.

이를 구현하는 방식은 HardWired 방식과 Micro Program이 있다.

CPU의 기능

명령어

시스템이 특정 동작을 수행시키는 단위이며, 2가지로 구성되어 있다.
-Op-Code : 명령어에서 실제로 어떤 동작을 하는지 나타내는 부분
Operand : 피연산자, 명령코드가 연산할 대상

캐시 메모리

CPU 내부 또는 그 밖에 존재하는 메모리로써, 메인 메모리와 CPU 간의 데이터 성능 향상을 위한 중간다리 역할을 한다.

CPU가 필요한 데이터가 캐시 메모리 내에 들어있으면 Cache hit라 하고 없으면 Cache miss라 한다.

운영체제

운영체제는 왜 필요한가?

CPU,메모리,디스크 등이 서로 연결만 되어있다고 해서 우리가 원하는 프로그램을 실행할 수가 없다. 따라서 이들 간에 서로 데이터를 주고받으면서 논리적인 일을 해야한다.

이를 가능하게 하는게 운영체제다.

만일 응용 프로그램이 시스템 자원을 마음대로 사용한다면 보안상 취약할 것이다.

그렇기 때문에 응용 프로그램은 권한사용자에 대한 관리가 필요하다.

또한 운영체제를 통해 컴퓨터에게 일을 시키려면 API를 제공해야 하는데,

운영 체제에서 다양한 함수를 제공하는 것을 시스템 콜이라고 한다.

프로세스

프로그램이 실행 중인 상태로 특정 메모리 안에 코드가 적재되고 스택 마냥 CPU에 의해 해당 명령어가 하나씩 수행되고 있는 상태를 말한다.

프로세서 vs 프로세스

처음 보고 대체 이게 뭔 차이지 싶었는데 엄밀히 다른 개념이라고 한다.

자료를 보면서 간단하게 정리해보면 프로세서 는 하드웨어 측면에서 CPU를 의미하며, 소프트웨어 측면에서는 컴파일러나 워드프로세서 등이 속할 수 있다.

그렇기 때문에 프로세스는 작업 목록이고 프로세서는 데이터 처리 장치라고 할 수 있을 것 같다.

참고 : https://blogger.pe.kr/422

스레드

명령어가 CPU를 통해서 수행되는 객체의 단위. 반드시 1개 이상이 존재해야 하며, 같은 프로세스 내에 있는 Stack을 제외한 자원과 상태를 공유한다.

참고 : https://velog.io/@gil0127/%EC%8B%B1%EA%B8%80%EC%8A%A4%EB%A0%88%EB%93%9CSingle-thread-vs-%EB%A9%80%ED%8B%B0%EC%8A%A4%EB%A0%88%EB%93%9C-Multi-thread

스레드가 왜 필요한가?

컨베이어 벨트로 물건을 보낸다고 생각해보면 한명이 하나의 벨트 내에서 작업을 수행하면

시간이 오래 걸리지만, 여러 개가 있으면 좀 더 빨리 수행할 수가 있다.

이렇게 여러개 작업 단위로 구성된 프로그램에서 요청을 동시에 처리하기 위함이다.

스레드 특징

  • 프로세스 내에서 실행되는 흐름 단위

  • 각 스레드마다 콜 스택이 존재하며, code,data,heap은 서로 공유한다.

  • 스레드는 다른 스레드와 독립적이기 때문에 두 개 이상의 스레드가 동작할 경우 순서 예측이 불가능하다.

싱글 스레드 vs 멀티 스레드

싱글 스레드

자바스크립트가 대표적인 싱글 스레드 언어이며,

장점으로는 자원 접근에 대한 동기화를 신경 쓰지 않아도 된다.

그리고 컨텍스트 스위칭이 발생하지 않는다고 하는데 이 부분은 좀 더 찾아봐야 할 것 같다.

단점으로 여러 개의 CPU를 활용하지 못하며, 연산량이 많을 경우 이전 작업이 먼저 완료되어야 한다.

멀티 스레드

장점으로는 작업을 분리해서 실행하기 때문에 싱글 스레드에 비해 효율적이다.

단점으로는 설계가 까다롭고 자원 공유의 문제가 발생하는데, 하나의 스레드에서 문제가 생기면 전체에 영향을 미친다.

그리고 컨텍스트 스위칭 비용이 비싼 편이다.

profile
블로그 이전했습니다. https://nextjs-blog-haseungdev.vercel.app/

0개의 댓글