본문 바로가기
개발 공부/네트워크 기초

운영체제, 문자열, 그래픽 개념정리

by 크롱이크 2021. 8. 6.

문자열

유니코드

  세계의 모든 문자를 컴퓨터에서 일관되게 표현하고 다룰 있도록 설계된 산업 표준

인코딩(부호화)

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

신호를 입력하는 인코딩과 문자를 해독하는 디코딩을 하기 위해서는 미리 정해진 기준을 바탕으로 입력과 해독이 처리되어야 한다.

이렇게 인코딩과 디코딩의 기준을 문자열 세트 또는 문자셋(charset)이라고 한다.

 

ASCII 문자

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

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

 

UTF-8 UTF-16 차이점

UTF-8 UTF-16 인코딩 방식의 차이 의미,

UTF-8 Universal Coded Character Set + Transformation Format – 8-bit 약자로, UTF- 뒤에 등장하는 숫자는 비트(bit)

UTF-8은 ASCII 코드의 경우 1 byte, 크게 영어 외 글자는 2byte, 3byte, 보조 글자는 4byte를 차지

UTF-8은 UTF-16에 비해 바이트 순서를 따지지 않고, 순서가 정해져 있습니다.

UTF-8에서는 한글은 3 바이트

 

UTF-16은 유니코드 코드 대부분(U+0000부터 U+FFFF; BMP) 을 16 bits로 표현한다.

UTF-16은 코드 그대로 바이트로 표현 가능하고 바이트 순서가 다양하다.

UTF-16에서는 2 바이트를 차지합니다.

 

그래픽

 

운영체제

시스템 자원 관리

운영체제가 없다면, 응용 프로그램이 실행될 없다.

응용 프로그램은 컴퓨터를 이용해 다양한 작업을 하는 것이 목적이고,

운영체제는 응용 프로그램이 하드웨어에게 일을 시킬 있도록 도와준다.

하드웨어를 구성하는 일을 하는 CPU, 자료를 저장하는 RAM, 디스크 등의 시스템 자원을 관리하는 주체가 바로 운영체제이다.

1)프로세스 관리(CPU)

2)메모리 관리

3) I/O 입출력관리(디스크,네트워크 )

응용 프로그램 관리

모든 응용 프로그램이 시스템의 자원을 마음대로 사용한다면, 해커에 의한 공격에 무방비한 상태

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

 

 

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

응용 프로그램이 운영체제를 통해 컴퓨터에게 일을 시키려면, 컴퓨터를 조작할 있는 권한을 운영체제로부터 부여받아야 한다.

권한을 부여받고 후에는, 운영체제가 제공하는 기능을 이용할 있다.

응용 프로그램이 운영체제와 소통하기 위해서는, 운영체제가 응용 프로그램을 위해 인터페이스(API) 제공해야 한다.

응용 프로그램이 시스템 자원을 사용할 있도록, 운영체제 차원에서 다양한 함수를 제공하는 시스템 (System call)이라고 부른다

 

.exe 라는게 붙어있는 것을 프로그램이라고 한다.

동시적 병렬적 여러 프로세스를 함께 돌리는 작업은 동시적, 병렬적, 혹은 이둘의 조합으로 이루어진다.

 

1. 프로세스(Process)

운영체제에서는 실행 중인 하나의 애플리케이션을 프로세스라 한다. 사용자가 애플리케이션을 실행하면, 운영체제로부터 실행에 필요한 메모리를 할당 받아 애플리케이션의 코드를 실행한다. 이때 실행되는 애플리케이션을 프로세스라 부른다. Chrome 브라우저를 실행하면, 개의 프로세스가 생성된다. 이렇게 하나의 애플리케이션은 여러 프로세스(다중 프로세스) 만들기도 한다.

 

2. 스레드(Thread)

 하나의 스레드는 코드가 실행되는 하나의 흐름이기 때문에, 프로세스 내에 스레드가 개라면 코드가 실행되는 흐름이 생긴다는 의미

 

3. 멀티 스레드(Multi-Thread)

멀티 태스킹은 가지 이상의 작업을 동시에 처리하는 것을 의미

운영체제는 멀티 태스킹을 있도록, 프로세스마다 CPU 메모리 자원을 적절히 할당하고 병렬로 실행합니다.

멀티 프로세스가 애플리케이션 단위의 멀티 태스킹이라면, 멀티 스레드는 애플리케이션 내부에서의 멀티 태스킹이라고 있습니다.

 

  • 동시에 돌릴 수 있는 스레드 수는 컴퓨터에 있는 코어 갯수로 제한된다. 운영체제(또는 가상 머신)는 각 스레드를 시간에 따라 분할하여, 여러 스레드가 일정 시간마다 돌아가면서 실행되도록 합니다. 이런 방식을 시분할이라고 한다.
    • Concurrency(동시성, 병행성): 여러 개의 스레드가 시분할 방식으로 동시에 수행되는 것처럼 착각을 불러일으킴
    • Parallelism(병렬성): 멀티 코어 환경에서 여러 개의 스레드가 실제로 동시에 수행됨

4. Context Switching

다른 태스크(프로세스, 스레드)가 시작할 수 있도록 이미 실행중인 태스크(프로세스, 스레드)를 멈추는 것을 Context Switching이라 한다.

레스토랑으로 비유//

프로세서는 요리사

대량주문이 들어오는 식당에서 끊임없이 만들어지는 메뉴하나하나가 프로세스

컴퓨터는 프로세스 하나하나 분할해서 할당한다.

요리사가 여러가지 요리를 동시적으로 하든, 여러 요리사가 하나의 요리씩 맡아 병렬적으로 하든 둘을 조합해서 하든 요리를 계속만들어내는 것이라 생각하면된다.

 

한메뉴의 스레드들은 같은 조리대에서 진행된다.

같은 메뉴를 만들때는 같은 공간과 장비, 같은 자원을 공유하는 것이 효율적이다.

 프로세스들은 컴퓨터의 자원을 분할해서 쓰지만 스레드는 클래스마다 주어진 전체 자원을 함께 사용하는거다.

이게 속도와 효율면에서 낫겠지만 단점도 있다. 

프로세스 안에서 공유되는 변수에 스레드 두개가 동시에 손을 되면 에러가 된다.

시간 문제로 발생하는 이런 상황들을 예상하고 방지하기 위해서 스레드를 사용하는 프로그래밍은 코드를 짜기도 디버깅해서 오류를 찾기도 굉장히 까다로운경우가 많다.

 

반응형

댓글