영상이란 2차원 평면 위에 그려진 시각적 표현물을 말하며 사진과 동영상을 모두 포함하는 개념이다.

 

디지털 영상은 2차원 평면위에 화소들의 집합으로 이루어진 영상을 말한다.

 

그러면 화소란 무엇일까 ❓

 

영상을 구성하는 가장 기본적인 단위로써 Pixel이라 불린다. 

 

가로축 픽셀 수 X 세로축 픽셀 수해상도를 나타내며 숫자가 높을수록 해상도는 선명하며 낮을수록 해상도는 떨어진다.

 

 

예를 들어 256 X 256 과 64 X 64의 해상도가 있다면 256 X 256이 해상도가 더 높다.

 

화소는 화솟값을 가지며 화소의 명암이나 색을 나타내는 정수 이어야 한다. 

 

색공간이란 색 체계를 3차원 공간으로 표현한 개념으로 컴퓨터는 빛의 3원 색인 RGB를 사용하여 밝기 정도를 수치화하고 RGB 각각 0~255의 값을 가진다. 

 

✌ 컬러 이미지라면 하나의 픽셀에 Red, Green, Blue의 값이 각각 들어가 있는 것으로 이를 3 Channel이라 부르며 코드에서 표현할 경우 3차원 배열로 표현된다. 

 

3D matrix로 표현할 시 Img[세로축][가로축][채널]

 

ex) img [640][480][3]

img [640][480][0] - Blue의 화소 값들만 추출

img [640][480][1] - Green의 화소 값들만 추출

img [640][480][2] - Red의 화소 값들만 추출

 

✌ 흑백 이미지라면 하나의 픽셀에는 색이 없으므로 RGB가 없고 명암을 나타내는 0~255의 값이 들어가고 1 Channel이다. 

 

2D matrix로 표현할 시 Img [세로축][가로축]

 

ex) img [640][480]

 

컬러 이미지에서 3 Channel 화소 값이 모두 0일 경우 검은색

 

컬러 이미지에서 3 Channel 화소 값이 모두 255일 경우 하얀색

즉, 3채널 컬러 이미지화소값이 각 채널의 색상값을 나타내고 1채널 그레이 이미지픽셀값이 밝기를 나타낸다.

JWT란 API 요청이 들어왔을 경우 사용 가능한 사용자인지 확인하는 절차(=인증) 방법으로써 JSON WEB TOKEN이다.

 

클라이언트와 서버 사이에서 JSON 객체를 사용하여 정보를 안전성 있게 전달할 수 있다.

 

👀 TOKEN 인증의 장점

 

  1. 보안성 - 더 이상 쿠키를 저장하지 않기 때문에 더 높은 보안성을 보장
  2. 무상태 & 확장성 - 세션을 이용할 경우 여러 대의 서버를 사용한다면 어떤 유저가 로그인했을 때 그 유저는 처음 로그인했던 서버에만 요청을 보낼 수 있어 서버를 여러 대 운영하는 장점이 사라진다.
  3. 확장성 - 페이스북/구글 같은 소셜 계정들을 이용하여 다른 웹서비스에서도 로그인이 가능하다.

OAuth : 페이스북으로 로그인하기처럼 다른 웹 서비스의 계정으로 사용자 인증을 대신하는 기술

 

👀 JWT 프로세스

 

클라이언트에서 JSON 객체 형식으로 id와 password를 보낸다. 그러면 서버에서 암호화하여 문자열로 된 JWT를 주고 다음부터 클라이언트는 HTTP HEADER에 JWT를 추가함으로써 사용자 인증을 요청한다. 서버는 JWT를 받아 다시 디코딩하여 클라이언트에서 요청한 사용자와 정보를 일치시킨다.

 

👀 JWT의 구조와 생성

JWT는 Header(헤더), Payload(내용), Verify Signature(서명)으로 구성되어있다.

 

1️⃣ Header - 토큰 정보

 

  • typ - 토큰의 타입을 명시
  • alg - 해싱 알고리즘을 명시

 

2️⃣ Payload - 전달할 정보

  • claim : name: value의 한 쌍을 의미 -> 따라서 하나의 토큰에 여러 개의 클레임을 넣을 수 있다.

 

✌ 클레임의 종류

  • 지정된 클레임(registerd Claim) - 토큰에 대한 정보들을 담기 위하여 클레임 이름이 이미 정해진 클레임
  • 공개 프레임(public Claim) - 클레임 이름으로 URL을 사용하여 URL이 중복되는 것을 피해 충돌을 방지해야 한다.
  • 비공개 프레임(private Claim) - 클라이언트와 서버 합의 하에 사용되는 클레임 이름들

 

3️⃣ Verify Signature - 토큰이 검증되었다는 사실을 증명

  • JWT형식으로 만들고 암호화하는 과정

 

 

👀 JWT Module

  • 토큰 생성 메소드 - jwt.sign(json data, secretKey, [options, callback])
  • 토큰 확인 메소드 - jwt.verify(token, secretKey, [options, callback])

우선 Web Server란 무엇일까 ❓

 

클라이언트가 HTTP를 통해 웹 브라우저에서 요청하는 HTML 문서, CSS, 이미지 등 정적인 데이터를 전송해주는 역할(HTTP 응답)을 한다. 

 

따라서 웹 서버에는 리소스들을 저장하기 위하여 항상 실행 중이어야 하고 인터넷과 연결되어 있어야 하며 같은 IP 주소를 가지고 있어야 한다.

 

웹 서버의 종류에는 아파치(Apache), 인터넷 정보 서버(IIS) 등이 있다.

 

 

다음 WAS란 무엇일까 ❓

 

Web Application Server의 약자로 Web serverWeb Container로 구성되어 있다. HTML 같은 정적인 데이터 뿐만 아니라 동적인 페이지도 처리할 수 있게 비즈니스 로직이나 DB 조회 등 동적인 컨텐츠를 제공한다.

 

 

그러면 WAS와 Web Server를 함께 쓰는 이유는 무엇일까 ❓

 

  1. 기능을 분리해서 서버의 부하를 방지 - 정적인 콘텐츠는 Web Server에서 동적인 콘텐츠는 Web Container에서 처리
  2. 물리적으로 분리하여 보안 강화 - 공격에 대해 Web Server를 앞에 두어 DB나 로직이 담긴 Container까지 전파가 불가능하게 한다.
  3. 여러 대의 WAS를 연결할 수 있다.
  • Fail Over : 하나의 WAS가 기능을 못해도 다른 WAS 사용 가능
  • Fail Back : 중단된 WAS를 복구

 

✌ 대용량 웹 어플리케이션의 경우 여러 개의 서버를 사용해서 무중단 서버 운영이 가능하고 장애 극복에 쉽게 대응할 수 있다.

컴퓨터에는 여러 개의 프로세스가 시스템 내에 존재하기에 자원을 할당할 프로세스를 선택해야 한다. 이것을 스케줄링이라 한다. 즉 프로세스 스케줄링은 프로세서 사용시간을 프로세스들에게 분배하는 것이다.

 

스케줄링의 목적은 시스템의 성능을 향상시키는 것이다.

 

시스템 성능의 지표에는 무엇이 있을까 ❓

  1. 응답 시간 : 작업 요청으로부터 응답을 받을 때까지의 시간
  2. 작업 처리량 : 단위 시간 동안 완료된 작업의 수
  3. 자원 활용도 : 주어진 시간 동안 자원이 활용된 시간

이외에도 다양한 지표들이 있지만 지표의 종류보다 중요한것은 목적에 맞게 지표를 선택해 스케줄링 기법을 따르는 것이다. 예를 들어서 응답 시간이 중요한 시스템은 대화형 시스템에서, 작업 처리량은 일괄처리 시스템에서 자원 활용도는 비싼 장비의 시스템일 경우 중요하다.

 

스케줄링 기법이 고려하는 항목들을 알아보자.

  • 프로세스의 특성 : I/O-bounded , compute-bounded
  • 시스템 특성 : Batch system, interactive system
  • 프로세스의 긴급성
  • 프로세의 우선순위
  • 프로세스 총 실행시간

 

 

프로세스는 CPU를 사용하고 I/O를 대기하고 사용하면서 수행된다. CPU burstCPU 사용시간을 이야기하고 I/O burstI/O대기 시간을 이야기한다. Burst time은 스케줄링의 기준의 하나로써 CPU burst > I/O burst 라면 compute-bounded 라고한다. 반면에 CPU burst < I/O burst 라면 I/O-bounded라고 한다.

 

 

스케줄링의 단계

발생하는 빈도 및 할당 자원에 따라 스케줄링을 구분한다.

✌ Long-term Scheduling

Job scheduling이 속하며 Job scheduling이란 어떤 Job을 커널에 등록할 것인지를 말한다. Job scheduling은

프로세스 수를 조절하므로 다중 프로그래밍의 정도를 조절한다. 그래서 I/O-bounded와 compute-bounded 프로세스들을 잘 섞어서 선택해야 한다. 그래야 CPU가 작업을 하지 않거나 I/O 대기가 없어 스테 줄 링이 힘든 경우 등 비효율성이 생기지 않는다.

✌ Mid-term Scheduling

어느 프로세스에게 메모리를 할당할지 결정하는 것으로 Swapping이 속한다.

✌ Short-term Scheduling

Process scheduling이 여기에 속하며 Process scheduling이란 프로세서를 할당할 프로세스를 결정하는 것이다. 가장 빈번하게 발생되기에 매우 빨라야 한다.

 

스케줄링 단계 한눈에 보기

 

스케줄링 정책을 알아보자 ❗

  • 선점 VS 비선점
선점/비선점 스케줄링 의미 장점 단점
비선점 스케줄링 할당 받은 자원을 스스로 반납할 때까지 사용하기에 다른 프로세스들이 빼앗을수 없다. Context switch overhead가 적다. 평균 응답시간 증가, 높은 우선순위를 가진 프로세스들이 밀려난다.
선점 스케줄링 타의에 의해 자원을 빼앗길 수 있다. 응답성이 높아 시분할 시스템 등에 적합하다. Context switch overhead가 크다.

 

  • 우선순위
우선순위 스케줄링 의미 장점 단점
정적 우선순위 프로세스 생성시 결정된 우선순위가 계속 유지됨 구현이 쉽고 overhead가 적다. 시스템 환경 변화에 대한 대응이 어렵다.
동적 우선순위 프로세스의 상태 변화에 따라생성시 결정된 우선순위 변경 구현이 복잡하고 overhead가 크다. 시스템 환경 변화에 대해 유연한 대응이 가능하다.

'OS' 카테고리의 다른 글

CPU 스케줄링  (0) 2021.05.24
스레드의 공유자원 관리(동기화)  (0) 2021.05.09
스레드에 대해 알아보자  (0) 2021.01.03
인터럽트를 알아보자  (0) 2020.12.31
운영체제가 프로세스를 어떻게 관리할까❓  (0) 2020.12.31

자원을 할당받으면 프로세스가 그 자원을 제어하는 것이 운영체제의 기본이다. 여기서 스레드란 프로세스가 제어하는 부분을 이야기하는 것으로 하나의 프로세스는 여러 개의 스레드를 가질 수 있다.

 

스레드란 ❓

하나의 프로세스 안에서 다른 스레드들과 자원은 공유하면서 여러 개의 제어를 가능하게 하는 것이 스레드이다. 스레드는 Thread ID, 제어정보, 지역 데이터, 지역 데이터를 저장하는 스택이 하나의 스레드 구성요소가 되며 자원을 공유하기 때문에 Light Weight Process(LWP)라고 불린다. 스레드가 여러 개면 CPU를 병렬적으로 사용할 수 있어 프로세서 활용의 기본단위이다.

 

한 프로세스 내에서의 메모리 공간

같은 프로세스의 스레드들은 동일한 주소 공간을 공유하고 있어서 힙, 데이터, 코드의 자원을 공유하며 각각의 Stack pointer와 Program Counter을 갖는다. 이를 통해 CPU의 병렬 처리가 가능하고 여러 제어가 동시에 가능하다.

 

✌ 스레드의 장점

  • 사용자 응답성 향샹 : 다중 스레드일 경우 일부 스레드가 지연되어도 다른 스레드는 작업을 계속 처리할 수 있다.
  • 자원 공유 : 동일한 프로세스 메모리 안에 여러 개의 스레드가 있으면 커널의 개입을 피할 수 있다.
  • 경제성 : context siwtch 비용이나 프로세스 생성 비용이 없다.
  • 멀티 프로세서 활용 : 멀티 스레드를 사용하면 멀티 프로세서가 가능하고 이는 성능을 향상한다.

✌ 스레드의 구현

1️⃣ 사용자 수준 스레드

스레드 라이브러리가 스레드의 생성과 스케줄링을 담당하며 대표적인 라이브러리로는 POSIX threds, Win32 threads, Java threads 등이 있다. 

한 개의 프로세 스니깐 하나의 커널 수준 스레드가 생기며 스레드 라이브러리가 스레드를 생성하고 관리하기에 스레드 라이브러리 안에 스레드 제어 블록(TCB)이 있다. 따라서 스레드 라이브러리에 의해서 사용자 수준 스레드는 여러 개이고 커널 수준 스레드는 하나인 n:1 매핑이다. 커널은 스레드의 존재를 모르기에 커널의 오버헤드를 낮출 수 있으며 유연한 관리가 가능하다. 하지만 커널은 프로세스 단위로 자원을 할당하기에 만약 다른 스레드가 block이 되고 나머지 스레드들은 계속 동작할 수 있을지라도 커널은 그 사실을 모르기에 모든 스레드가 전부 대기하게 된다.

 

 

2️⃣ 커널 수준 스레드

OS(커널)이 직접 관리하며 커널 영역에서 스레드를 생성하고 관리하기에 Context switching 등 오버헤드가 크다.

사용자 영역의 스레드의 개수만큼 커널 수준 스레드가 생기기에 1:1 매핑이고 커널 수준에서 관리하기에 TCB도 커널에 생긴다. 커널이 각 스레드를 개별적으로 관리하기에 스레드들은 다른 스레드가 block이 되는 것과 관계없이 다른 스레드는 수행이 가능하며 병행 수행이 가능하다. 

 

사용자 수준 스레드와 커널 수준 스레드를 혼합하여 사용할 수는 없을까 ❓

혼합형 스레드(n:m)

n개의 사용자 수준 스레드와 m개의 커널 수준 스레드를 같이 사용하는 것으로 사용자는 원하는 수만큼의 스레드를 생성 가능하다. 각각의 장점을 합쳤기에 효율적이면서도 유연하다.

 

 

 

참고자료

www.youtube.com/watch?v=YlnvCIZQDkw&list=PLBrGAFAIyf5rby7QylRc6JxU5lzQ9c4tN&index=7

 

인터럽트란 무엇일까 ❓

예상치 못한 외부에서 발생한 이벤트를 말한다. 인터럽트의 종류는 다양하지만 대표적으로 I/O interrupt가 있다.

예를 들어서 게임(하나의 프로세스)을 하고 있을 때 언제 마우스를 눌러 총이 발사할지 프로세스는 예상하지 못한다.

따라서 예상하지 못한 외부에서 발생한 이벤트 인터럽트가 발생한 것이다.

 

인터럽트는 어떻게 처리될까 ❓

인터럽트가 발생하면 커널이 개입하여 프로세스를 중단시킨 다음 인터럽트를 처리하는데 인터럽트 처리 과정은 2가지로 나뉜다.

  1. Interrupt handling : 인터럽트의 발생장소와 원인을 파악하여 인터럽트 서비스를 할 것인지 말 것인지 결정한다.
  2. Interrupt service : 인터럽트를 서비스하기로 결정했다면 인터럽트 서비스 루틴을 호출한다.

 

먼저 인터럽트가 발생하면 프로세스의 정보를 PCB에 저장하는데 이것을 Content saving이라 한다. 다음 인터럽트 핸들러를 호출한다. 다음 인터럽트 서비스를 호출하는데 호출된 서비스 또한 하나의 프로세스이다. 따라서 서비스가 끝나면 ready 상태에 있던 프로세스들 중 스케줄링에 따라 다른 프로세스가 올라온다. 그러면 그 프로세스의 정보가 필요하게 되고 그 해당 프로세스의 PCB에서 정보를 가지고 오는 게 이것을 Context restoring이라 한다.

 

Context Switching이란 무엇일까 ❓

먼저 Context란 프로세스와 관련된 정보들의 집합으로 Context는 CPU안에 CPU register context와 메모리 안에 코드와 데이터, 스택, PCB가 있다. 따라서 인터럽트 서비스가 일어나면 해당 프로세스는 CPU를 빼앗기는 것이고 CPU register context를 PCB안에 저장하고 다시 CPU에 올라가는 running state가 되면 프로세스로 복구하는 것이다. 즉 Context saving + Context restoring을 합쳐 Context Switching이라 한다.

 

한마디로 Context Switching란 실행 중인 프로세스의 Context를 저장하고 앞으로 실행할 프로세스의 Context를 복구하는 일이다.

 

Context Switch Overhead

Context Switching에 소요되는 비용으로써 OS의 성능에 큰 영향을 주게 되므로 불필요한 Context Switching을 줄이는 것이 필요하다. 따라서 줄이는 방법 중의 한 가지인 스레드에 대해 알아보자.

 

 

참고자료

www.youtube.com/watch?v=MJTr37lgaMA&list=PLBrGAFAIyf5rby7QylRc6JxU5lzQ9c4tN&index=6

 

+ Recent posts