컴퓨터 공학 기초

Jamie·2021년 9월 9일
post-thumbnail


처음봐서 헷갈리는 컴퓨터 공학 용어들 정리하자!

문자열

인코딩: 어떤 문자나 기호를 컴퓨터가 이용할 수 있는 신호로 만드는 것

  • 이 신호를 입력하는 인코딩과 문자를 해독하는 디코딩을 하기 위해서는 미리 정해진 기준을 바탕으로 입력과 해독이 처리되어야 함
  • 인코딩과 디코딩의 기준을 문자열 세트 또는 문자셋이라고 하고 문자셋의 국제표준이 유니코드

유니코드: 유니코드 협회가 제정하는 전 세계의 모든 문자를 컴퓨터에서 일관되게 표현하고 다룰 수 있도록 설계된 산업 표준

ASCII 문자

: 영문 알파벳을 사용하는 대표적인 문자 인코딩으로 7 비트로 모든 영어 알파벳을 표현할 수 있음

  • 52개의 영문 알파벳 대소문자와, 10개의 숫자, 32개의 특수 문자, 그리고 하나의 공백 문자를 포함함

UTF-8 (Universal Coded Character Set + Transformation Format -8-bit)

: 유니코드 한 문자를 나타내기 위해 1byte(=8 bits)에서 4 bytes까지 사용함 (한글은 3바이트)

  • 사용된 문자에 따라 더 작은 크기의 문자열을 표현할 수 있기 때문에 네트워크를 통해 전송되는 텍스트는 주로 UTF-8로 인코딩됨
  • 바이트 순서가 고정됨

UTF-16

:유니코드 코드 대부분을 16bits 로 표현함

  • 대부분에 속하지 않는 기타문자는 32bit(4 bytes)로 표현하므로 UTF-16도 가변 길이라고 할 수 있으나, 대부분은 2bytes로 표현함
  • 바이트 순서가 정해져 있음

그래픽


1.벡터 (svg, ai)

  • shape 기반
  • 로고, 일러스트와 같이 제품에 적용되는 이미지에 적합
  • 품질 저하 없이 모든 크기로 확대 가능, 해상도의 영향 X
  • 큰 크기의 벡터 그래픽은 작은 파일 사이즈 유지 가능
  • 현대의 브라우저에서 대부분 지원

2. 비트맵 (jpg, gif, png, bmp, psd)

  • pixel 기반
  • 색상의 조합이 다양한 이미지에 적합
  • 확대에 적합하지 않음
  • 큰 크기의 이미지 = 큰 파일 사이즈
  • jpg, gif, png 등이 널리 쓰임

운영체제

1. 운영체제
1️⃣ 시스템 자원 관리

  • 응용 프로그램은 컴퓨터를 이용해 다양한 작업을 하는 것이 목적이고, 운영체제는 응용 프로그램이 하드웨어에게 일을 시킬 수 있도록 도와줌
  • 하드웨어를 구성하는 일을 하는 CPU, 자료를 저장하는 RAM, 디스크 등의 시스템 자원을 관리하는 주체

2️⃣ 응용 프로그램 관리

  • 응용 프로그램이 실행되고, 시스템 자원을 사용할 수 있도록 권한과 사용자를 관리함

2. 응용 프로그램
: 운영 체제를 통해 컴퓨터에게 일을 시키는 것

  • 컴퓨터에게 일을 시키려면, 컴퓨터를 조작할 수 있는 권한을 운영체제로부터 부여받아야 함
  • 권한을 부여받고 난 후에는, 운영체제가 제공하는 기능을 이용할 수 있음
  • 응용 프로그램이 운영체제와 소통하기 위해서는, 운영체제가 응용 프로그램을 위해 인터페이스를 제공해야함
  • 시스템 콜(System call): 응용 프로그램이 시스템 자원을 사용할 수 있도록, 운영체제 차원에서 다양한 함수를 제공하는 것

용어 정리

1. 프로세스 (process)
: 사용자가 애플리케이션을 실행하면, 운영체제로부터 실행에 필요한 메모리를 할당 받아 애플리케이션의 코드를 실행하고, 이 애플리케이션을 프로세스라 부름

2. 스레드 (thread)
: 프로세스 내에서 실행되는 흐름의 단위

  • 각 스레드 마다 call stack이 존재
  • 스레드는 다른 스레드와 독립적으로 동작

3. 멀티 스레드 (multi-Thread)
: 두 가지 이상의 작업을 동시에 처리하는 것

  • 멀티 태스킹을 할 수 있도록, 프로세스마다 CPU 및 메모리 자원을 적절히 할당하고 병렬로 실행함
  • 메모리 공간과 시스템 자원의 소모가 줄어듬
  • 스레드 간의 통신이 필요한 경우에도 전역 변수의 공간 또는 동적으로 할당된 공간인 Heap 영역을 이용해서 훨씬 간단함
  • 시스템의 처리량이 향상되고 자원 소모가 줄어들어 자연스럽게 프로그램의 응답 시간이 단축됨

<-> 프로세스 간 공유하는 자원이 없음
서로 다른 스레드가 같은 데이터에 접근하고, 힙 영역을 공유하기 때문에 서로 다른 스레드가 서로 사용중인 변수나 자료구조에 접근하여 엉뚱한 값을 읽어오거나 수정하는 일이 발생할 수 있음

=> 그래서 멀티스레딩 환경에서는 동기화를 통해 작업 처리 순서를 제어하고, 공유 자원에 대한 접근을 제어해야 함

4. 동시성 & 병렬성

  • 동시성, 병행성(concurrency): 여러 개의 스레드가 시분할 방식으로 동시에 수행되는 것처럼 착각을 불러일으킴
  • 병렬성(parallelism): 멀티 코어 환경에서 여러 개의 스레드가 실제로 동시에 수행됨

5. context switching
: 다른 task(프로세스, 스레드)가 시작할 수 있도록 이미 실행중인 task를 멈추는 것

6. 가비지 컬렉션
: 프로그램에서 더 이상 사용하지 않는 메모리를 자동으로 정리하는 것

  • 트레이싱: 한 객체에 flag를 두고, 가비지 컬렉션 사이클마다 flag에 표시 후 삭제하는 mark and sweep방법
    객체에 in-use flag를 두고, 사이클마다 메모리 관리자가 모든 객체를 추적해서 사용중인지 아닌지를 mark하고, 그 후 표시되지 않은 객체를 삭제(sweep)하는 단계를 통해 메모리를 해제함

  • 레퍼런스 카운팅:한 객체를 참조하는 변수의 수를 추적하는 방법

7. 캐시
:많은 시간이나 연산이 필요한 작업의 결과를 저장해두는 것

  • 캐시의 데이터는 일반적으로 RAM과 같이 빠르게 액세스할 수 있는 하드웨어에 저장되며, 소프트웨어 구성 요소와 함께 사용될 수도 있음
  • 기본 스토리지 계층(SSD. HDD)에 액세스하여 데이터를 가져오는 더 느린 작업의 요구를 줄이고, 데이터 검색의 성능을 높임
  • 장점: 애플리케이션 성능 개선, 데이터베이스 비용 절감, 백엔드 부하 감소, 예측 가능한 성능, 데이터베이스 핫스팟 제거, 읽기 처리량 증가
profile
공부하고 비행하다 개발하며 여행하는 frontend engineer

0개의 댓글