컴퓨터공학 기초

KoEunseo·2022년 10월 4일
0

CS

목록 보기
7/8

컴퓨터 구조

컴퓨터 = 하드웨어 + 소프트웨어

입력장치

  • 컴퓨터가 처리할 수 있는 형태로 데이터와 명령을 받아들이는 물리적 장치.
    키보드, 마우스, 스캐너, 타블렛, 조이콘

출력장치

  • 처리된 데이터를 사람이 이해할 수 있는 형태로 출력하는 물리적 장치.
    모니터, 프린터

중앙처리장치 CPU

산술/논리 연산 장치(ALU) + 제어장치 + 레지스터로 구성되어있다.

  • 제어장치는 프로그램에 따라 명령과 제어신호를 생성해 각종 장치의 동작을 제어하는 것이다.
  • 레지스터는 CPU의 내부 메모리로서 CPU에서 사용하는 데이터를 일시적으로 저장하는 장소이다.

저장장치

주기억장치(RAM, ROM) + 보조기억장치(디스크, 씨디)

  • 레지스터 용량이 작기 때문에 주기억장치에서 정보를 저장했다 필요할 때 읽어들이는 저장소로 사용된다.
  • 보조기억장치는 속도는 느리지만 대용량의 기억이 가능하며 현재 사용하지 않는 프로그램은 보조기억장치에 저장된다.
    자기 디스크 : 플로피디스트, 하드디스트
    광 디스크 : CD, DVD
    플래쉬 메모리 : USB, SSD

CPU

폰 노이만 구조

중앙처리장치 : 중앙처리장치는 연산을 수행하고 기억장치에 기억되어있는 명령어들을 수행하는 컴퓨터 시스템을 이루는 핵심 부품.

연산장치 Arithmetic Logic Unit

가산기 + 보수기 + 누산기 + 기억레지스터 + 데이터레지스터로 이루어져 있음
캐시나 메모리로부터 읽어 온 데이터는 레지스터라는 CPU 전용의 기억장소에 저장된다. ALU는 레지스터에 저장된 이 데이터를 이용해 산술 연산을 수행한다.
부동소숫연산장치, 정수연산장치, 논리연산장치 등이 있다.

레지스터 Register

중앙처리장치 내부에 있는 기억장치.
범용 레지스터(주로 산술 연산 논리장치에 의해 사용), 전용 레지스터(PC등 특수목적에 사용)로 구분된다.

  • IR Instruction Register
    현재 수행중에 있는 명령어 부호를 저장하고 있는 레지스터
  • PC Program Counter
    명령이 저장된 메모리의 주소를 가리키는 레지스터
  • AC Accumulator
    산술 및 논리 연산의 결괄르 임시로 기억하는 레지스터

제어장치 Control Unit

자신 및 주변기기를 컨트롤하는 장치.
프로그램 계수기(프로그램의 수행 순서를 제어), 명령 레지스터(현재 수행중인 명령어의 내용을 임시로 기억), 명령해독기(명령 레지스터에 수록된 명령을 해독해 수행될 장치에 제어신호를 보냄)

제어 장치 구현

  • Hardwired 고정배선제어
    -제어신호가 Hardwired Circuit에 의해서 생성되도록 하드웨어를 구성.
    -상태계수기와 PLA(Programmable Logic Array) 회로로 구성된다.
    -고속 처리, 고가
    -RISC 시스템에 적용
  • Micro Program
    -발생 가능한 제어 신호들의 조합을 미리 구성.
    -ROM에 저장했다 필요시 신호를 발생시ㅣ는 Software방식
    -하드웨어 방식에 비해 속도도 낮고 가격도 저렴하다.
    -CISC에 적용

CPU 기능

명령어 인출 및 해독은 모든 명령어들에 대해 공통적으로 수행한다.
기억장치로부터 명령어를 읽어온다.
데이터 인출 및 처리, 쓰기와 같은 것들은 명령어에 따라 필요할 때만 수행한다.
이 명령어 및 명령어 수행 과정과 처리방식이 CPU에서 핵심인 부분이다.

명령어

  • 동작코드 Op-code 각 명령어의 실행 동작을 구분하여 표현
  • 오퍼랜드 Operand 명령어의 실행에 필요한 자료나 실제 자료의 저장 위치

명령어 수행 과정

명령어 처리방식

  • CISC : 하나의 기능에 해당하는 하나의 명령이 있다.
    -여러 사이클로 명령어 처리
    -많은 명령어가 메모리 참조
    -파피프라이닝 사용이 어렵다.
    -복잡한 마이크로프로그램 구조
  • RISC : 컴퓨터 내부적으로 사용하는 명령어 세트를 단순화시켜 처리. 단순한 명령을 조합해 하나의 기능을 수행한다.
    -하나의 사이클로 명령어 처리
    -메모리 Load/Store 명령만 처리
    -파이프라이닝, 슈퍼스칼라의 사용 가능
    -복잡한 컴파일러 구조
파이프라이닝 : 명령어를 순차적으로 실행. 필요한 명령을 단계별로 구분하여 나누고 이를 차례로 실행한다.
슈퍼스칼라 : 파이프라인을 여러개 두어 여러 명령어를 동시에 실행하는 기술

메모리

기억소자(반도체). 전류를 흐르게도 하고 흐르지 않게도 하는 특징을 통해 임시적인 내용들을 기억하게 만든다.

  • 보조기억장치와 메모리의 차이는 '휘발성' 이다. 메모리는 시스템이 활성화 된 상태에서 그 값을 기어갛고 있지만 시스템이 꺼지게 되면 지워진다.

메모리의 속도

메모리가 CPU와 데이터를 주고받는 시간을 말하며 액세스라고 한다. 단위는 ns(나노세컨드: 10억분의 1초)

  • 리프레시 시간
    일정 시간마다 재충전을 해주어야 정보가 사라지지 않는다. 메모리에서 한번 읽고 나서 다시 읽을 수 있는 사이를 말한다.
  • 메모리 액세스 시간
    데이터를 읽어오라는 명령을 받고 데이터를 읽기 시작하기까지의 시간. CPU로부터 명령어에 해당하는 값을 가져오는 데 걸리는 시간.
  • 사이클 시간 : 메모리 액세스 시간 + 리프레시 시간
    메모리 작업이 완료와 동시에 대기 신호를 내놓은 후 다음 신호를 받을 준비가 되었다는 신호를 주기까지의 시간.

주기억장치

RAM

프로그램의 수행 속도에 영향을 준다. CPU에서 직접 접근이 가능한 유일한 저장장치.
SRAM(리프레시 필요없음, 저전력, 고가), DRAM(저가)

ROM

대부분 읽을 수만 있는 장치로 구성. 전원이 끊겨도 데이터가 날아가지 않는다.

보조기억장치

자기 디스크

원판 표면의 철 입자의 방향, N/S극으로 0과 1을 표현한다.
플로피디스크(FDD), 하드디스크(HDD)

광 디스크

빛의 반사를 이용해 자료를 읽는 저장매체.
1세대: CD / 2세대: DVD / 3세대: 블루레이 디스크 / 차세대: 테라디스크, HVD

플래시 메모리

전자적으로 데이터를 지우고 쓸 수 있는 비휘발성 메모리로 충격에 강하다. 휴대용 기기에 많이 쓰임.
USB, SSD(기계적 장치는 빠졌지만 저전력 저소음 저중량)

캐시 메모리

Cache : 보관, 저장
CPU 내 또는 외에 존재하는 메모리.
메인 메모리와 CPU 간의 데이터 속도 차이를 극복하는 완충 역할을 한다.
캐시 메모리는 메인 메모리의 일정 블록 사이즈의 데이터를 가지고 있다가 CPU에 워드 사이즈 만큼의 데이터를 전송한다.
이때 이 사이즈들이 캐시의 성능에 영향을 미치는데, 블록사이즈나 워드사이즈의 크기에 따라 캐시 메모리 적중률(Hit Ratio)이 다르기 때문.

CPU가 필요한 데이터가 캐시메모리 내에 들어와있으면 Cache Hit라 하고 없을 경우 Cache Miss라고 함. 원하는 데이터가 없을 경우 주기억장치로부터 데이터를 읽어오게 된다.
원하는 데이터가 캐시에 있을 확률을 Hit Ratio라고 한다.

  • 캐시 크기: 캐시 메모리 사이즈가 크면 적중률이 높아지지만 비용이 증가한다. 그리고 액세스 시간이 더 길어진다.
  • 인출방식
    • 요구인출: 필요한 정보만 인출
    • 선인출: 필요한 정보 + 필요할 정보 인출.
  • 쓰기 정책 : 캐시 블록이 변경되었을 때 내용을 주기억장치에 갱신하는 시기와 방법
    • write-through: 모든 쓰기 동작들이 캐시로뿐만 아니라 주기억장치로도 동시에 수행. 캐시내용과 주기억장치 내용이 항상 같다. 쓰기시간이 길어짐
    • write-back: 캐시에서 데이터가 변경되어도 주기억장치에는 갱신되지 않음. 쓰기 동작 최소화, 쓰기시간 최소화, 캐시내용과 주기억장치 해당 내용이 서로 다른 단점.
  • 교체 알고리즘: 새로운 블록이 캐시로 적재될 때 모든 라인이 채워져있을때 새로운 블록으로 교체. 이때 캐시 적중률을 극대화하기 위한 알고리즘
    • LRU 최소 최근 사용
    • FIFO 적재된 지 가장 오래된 블록 교체
    • LFU 최소사용빈도
  • 매핑 기법: 직접매핑, 어소시에이티브 매핑, 셋 어소시에이티브 매핑 등

캐시 참고자료 http://contents.kocw.net/KOCW/document/2015/shinhan/leedonggyu/9.pdf

운영체제 OS

공룡책으로 정리하는 운영체제

https://parksb.github.io/article/5.html

OS 목적과 기능

목적 : 처리능력, 사용가능도, 신뢰도 향상, 반환시간 단축
기능 : 자원관리, 스케줄링, 인터페이스, 하드웨어 네트워크 관리제어

시스템 자원 관리

응용 프로그램은 권한에 대한 관리가 필요하다. 여러사람이 하나의 기기를 사용하는 경우 사용자를 관리하는 일도 중요하게 된다.
응용프로그램을 사용하려면 권한을 부여받아야한다. 권한을 받으면 운영체제가 제공하는 기능을 이용할 수 있다.
운영체제 차원에서 다양한 함수를 제공하는 것을 시스템 콜이라고 부른다.
예를 들어, 응용프로그램이 프린터 사용에 대한 권한을 획득한 후에는 프린터를 사용할 때 필요한 API를 호출해야 한다. 이 API는 시스템 콜로 이루어져 있다.

프로세스

프로그램이 실행중인 상태

프로세스 구성요소

  1. 유저 메모리 영역 관리 VAD
    프로세스 별로 독립된 영역을 가지게 됨. 커널 메모리공간의 경우 모든 프로세스가 공유해 사용한다. 독립된 영역을 관리하기 위해 VAD라는 관리 테이블이 존재함
  2. 핸들 테이블
    프로세스에서 사용하는 모든 핸들에 대한 커널 객체 포인터 정보를 배열 형태로 가지고 있는 공간. 프로세스를 종료할때 이 테이블의 정보를 참고해 이 프로세서에서 사용하고 있는 모든 커널 객체 자동반환
  3. 독립적인 메모리공간
    프로세스 단위로 관리되는 자원 중 가장 중요한 부분이 가상 메모리이다.
    페이징기법을 이용해 프로세스마다 별도의 고유한 메모리를 사용할 수 있게 한다.

프로세스 특징

  • 자원 소유 단위
    각 프로세스는 자신의 실행 이미지 로드와 실행에 필요한 추가적인 메모리공간을 갖고있어야함.
    해당 프로세스가 접근하고자 하는 파일, 입출력 장치들에 대해서 프로세서 단위로 할당받아 관리됨.
  • 디스패칭 단위: 스레드
    여러 프로세스의 병렬적인 실행을 위해 하나의 프로세스에서 여러개의 디스패칭 단위가 실행될 수 있도록 한다.

프로세스 상태

생성 -> 준비 -> 실행 -> 대기 -> 완료

프로세스 vs 프로세서

프로세스: 특정 목적을 수행하기 위해 나얄된 작업의 목록
메모리에 적재되어 프로세서에 의해 실행중인 프로그램
프로세서: CPU를 의미, 데이터 처리 시스템을 의미.

스레드

명령어가 CPU를 통해서 수행되는 객체의 단위
프로세스 내에서의 작업 단위. 경량 프로세스라고도 한다.

같은 프로세스 내에 있는 스레드는 같은 주소 공간에 존재하며 동일한 데이터에 접근 가능. 하나의 스레드가 수정한 메모리는 같은 메모리를 참조하는 스레드에 영향을 미친다.
여러개의 작업 단위로 구성된 프로그램에서 요청을 동시에 처리하기 위해 필요하다.

스레드 구성요소

가상 CPU, 수행코드, 처리데이터

스레드 특징

하나의 스레드는 한번에 하나의 명령을 수행한다.
각 스레드마다 콜 스택이 존재하며 나머지 영역은 공유한다.
다른 스레드와 독립적으로 동작한다. 두개 이상의 스레드가 동작하는 경우 실행 및 종료 순서를 예측할 수 없다.

싱글 스레드

프로세스가 단일 스레드로 직렬 처리하는 방식.

장점

  • 자원 접근에 대한 동기화 신경쓰지 않아도 됨
  • 문맥 교환작업을 요구하지 않음
  • 쉽고 메모리를 적게 사용

단점

  • 여러개의 CPU 활용하지 못함
  • 연산량이 많은 작업 시 선점된 작업이 완료되어야 다른 작업 수행 가능
  • 에러처리가 안되면 멈춘다.

멀티 스레드

하나의 프로세스 내에서 둘 이상의 스레드가 동시에 작업 수행.
여러 개의 CPU를 사용해 여러 프로세스 동시에 수행.

장점

  • 실시간으로 사용자에게 응답
  • 한 프로세스를 여러 프로세서에서 수행(효율적)

단점

  • 설계가 어렵고 디버깅이 어렵다
  • 다른 프로세스에서 스레드를 제어할 수 없음
  • 자원 공유 문제
  • 문맥 교환 작업 필요
    • 데드락, 교착상태
    • 뮤텍스, 세마포어

동시성 Concurrency vs 병렬성 Parallelism

컴퓨터에 있는 코어 개수로 스레드 수가 제한된다. (싱글코어/멀티코어)
운영체제는 각 스레드를 시간에 따라 분할해 여러 스레드가 일정 시간마다 돌아가면서 실행되도록 한다.(시분할)

  • 동시성 시분할 방식으로 동시에 수행된 것처럼 처리
  • 병렬성 멀티 코어 환경에서 여러개의 스레드가 동시에 처리

문자열과 그래픽

문자열

그래픽

가비지 컬렉션

더이상 사용하지 않는 메모리를 자동으로 정리하는것
자바스크립트는 고수준 언어로서 가비지 컬렉션이 내장되어있다.

메모리 생존주기

  1. 필요한 만큼 메모리를 할당한다.
  2. 할당된 메모리를 사용한다.
  3. 메모리가 더이상 필요하지 않으면 해제한다.
    자바스크립트에서는 1,3번은 내장되어있어 자동으로 적용되어 작동되고 2번만이 명시적으로 사용된다.

c언어와 같은 저수준 언어에서는 1번부터 3번까지 개발자가 직접 명시적으로 사용할 수 있다. 그러나 자바스크립트는 자동으로 구현되는데, 메모리가 더이상 필요하지 않은지에 대한 판단은 어렵기 때문에 제한적인 해결책만을 구현한다.

가비지 컬렉션 알고리즘

가비지 컬렉션 알고리즘이 의존하고 있는 개념

  1. 참조
    자바스크립트 객체는 자신의 프로토타입에 대해 암묵적인 참조를 갖고 있고, 자신의 속성값에 대한 명시적 참조 또한 갖고있다.
  2. 렉시컬 스코핑
    변수 이름이 중첩된 함수에서 해석되는 방식을 정의.
    중첩되어 있는 더 안쪽의 함수는 부모 함수가 값을 반환한 뒤에도 부모 함수의 스포크를 포함하고 있음.

레퍼런스 카운팅(참조 횟수 계산)

레퍼런스가 복사될 때마다 +1
참조하고 있던 변수의 값이 바뀌거나 스코프를 벗어나면 -1
레퍼런트 카운트가 0이 되면 메모리를 비울 수 있음.

  • 순환 참조로 인한 문제 발생 : 서로 참조하는 순환참조일 경우 적어도 한번 참조한 것이 되므로 둘 다 가비지컬렉션이 될 수 없게 된다.

트레이싱

한 객체에 flag를 두고 가비지 컬렉션 사이클마다 flag에 표시 후 삭제하는 mark and sweep 방법.
객체에 in-use flag를 두고 사이클마다 추적하여 사용여부를 표시한다. 표시되지 않은 객체는 삭제(sweep)한다. 대부분 이 알고리즘을 이용한 가비지 컬렉터를 장착하고 있다.
mark and sweep 알고리즘은 객체에 접근할 수 있는지를 통해 필요여부를 판단하고 3단계를 거친다.
1. 루트(전역변수): 자바스크립트에서 window, node.js에서 global. 모든 루트의 완전한 목록을 만들어낸다.
2. 모든 루트와 자식들을 검사해서 활성화 여부를 표시. 루트가 접근할 수 없다면 가비지로 표시.
3. 마지막으로 가비지 컬렉터는 활성으로 표시되지 않은 모든 메모리를 OS에 반환.
참조되지 않은 객체는 접근할 수 없는 객체이다. 전자의 카운팅 방법보다 나은 방법이라 할 수 있다.

메모리 누수

주요 원인은 예상치 못한 참조(더이상 사용되지 않을거라 생각했지만 모종의 이유로 활성화 상태인 루트 트리 안에 존재하는 메모리 조각)이다.
더이상 사용되지 않지만 코드상 어딘가에 유지되어 해제되지 못한 변수들을 이른다.

  • 우발적으로 생성된 전역변수
  • DOM 외부에서의 참조
  • 클로저
    시스템이 특정 메모리가 사용중인지 여부를 판단하는것은 사실상 불가능하다. 그렇기 때문에 개발자가 해당 부분을 잘 확인해 메모리 누수를 막을 수 있어야 한다.
profile
주니어 플러터 개발자의 고군분투기

0개의 댓글