분류 전체보기 101

[Network] Chapter 3. 전송계층(Transport Layer)

전송 계층은 각기 다른 host에서 동작하는 애플리케이션 프로세스에 직접적인 통신 서비스를 제공하는 중요한 기능을 갖는다. 이번 챕터에서는 TCP와 UDP 프로토콜을 중심으로 전송 계층의 원리와 이 원리가 기존 프로토콜에서 어떻게 구현되어 있는지 번갈아 살펴볼 것이다. ① 전송계층과 네트워크 계층 간의 관계를 논의한다. 이를 통해 전송계층의 첫 번째 중요한 기능을 살펴본다. 즉, 양쪽 종단 시스템 간의 네트워크 계층의 전달 서비스에서 종단 시스템에서 동작하는 2개의 애플리케이션 계층 프로세스 간의 전달 서비스로 확장한다. 이 장에서 비연결형 전송 프로토콜인 UDP를 다룰 때 이 기능을 설명한다. ② 컴퓨터 네트워킹의 기본 문제에 대해서 다룬다. (데이터 손실, 손상 관련) 즉, 데이터 손실이나 손상이 일..

[OS] 3-1. 프로세스 개념

OS를 논의할 때 모든 CPU 활동을 어떻게 지칭해야 하는지가 항상 문제가 된다. 초창기 컴퓨터 ⇒ 작업(job)을 실행하는 일괄처리 시스템 시분할 시스템 ⇒ 사용자 프로그램 또는 태스크(task)를 실행하는 시스템 단일 사용자 시스템 ⇒ 워드 프로세서, 웹 브라우저와 같은 여러 프로그램을 한 번에 실행할 수 있다. 임베디드 장치 ⇒ 멀티 태스킹을 지원하지 않아서 한 번에 하나의 프로그램만 실행할 수 있다. 여러 측면에서 이러한 모든 활동들은 유사하므로 이러한 모든 활동을 프로세스(process)라고 한다. 대부분은 프로세스라는 용어도 사용할 것이지만 작업(job)이라는 단어가 사용될 때 많은 OS 이론 및 용어가 개발되었기 때문에 적절한 경우에는 작업(job)이라는 단어를 사용할 것이다. 1. 프로세스..

OS Concepts 10th 2023.09.04

[OS] Chapter 3. Process

초기 컴퓨터 시스템은 한 번에 하나의 프로그램만 실행되도록 허용했다. 오늘날의 컴퓨터 시스템은 메모리에 다수의 프로그램이 적재(load)되어 병행 실행되는 것을 허용한다. 때문에 여러 개의 프로그램을 보다 견고하게 제어하고 구획화할 필요성이 대두되었다. 이러한 필요성 때문에 프로세스라는 개념이 고안되었다. 프로세스란... 실행 중인 프로그램을 말한다. 프로세스는 현대 컴퓨팅 시스템에서 작업의 단위이다. OS의 주된 관심은 사용자 프로그램을 실행하는 것이지만 사용자 공간에서 제대로 수행할 수 있는 다양한 시스템 작업들을 처리할 필요가 있다. 그래서 하나의 시스템은 사용자 코드를 실행하는 프로세스와 OS 코드를 실행하는 프로세스의 집합체다. 이번 챕터에서는 프로세스란 무엇이고 OS에서 어떻게 표현되는지 OS..

OS Concepts 10th 2023.09.03

[OS] 2-8. OS 구조

1장에서 논의했던 OS의 구성요소들이 어떤 방법으로 서로 연결되어 있고 하나의 커널로 결합되는지 살펴보자. 1. 모놀리식 구조 (Monolithic Structure) 커널의 모든 기능을 단일 주소 공간에서 실행하는 파일에 넣는 구조다. 이 방법은 OS를 설계하는 일반적인 기술이다. 이러한 구조를 갖는 대표적인 운영체제가 Unix이다. Unix는 커널과 시스템 프로그램 두 부분으로 구성된다. Unix가 발전해오면서 커널은 여러 인터페이스와 장치 드라이버로 나눌 수 있고 각각이 추가되고 확장되었다. 전통적인 Unix 운영체제의 시스템 구조 위와 같이 계층으로 구성되어 있다. 시스템 콜 인터페이스 아래 ~ 물리적 HW 위 까지가 커널 영역이다. 커널은 시스템 콜을 통해 파일 시스템, CPU 스케쥴링, 메모리..

OS Concepts 10th 2023.09.02

[OS] 2-5. 링커와 로더(Linker and Loader)

이번 절에서는 프로그램 컴파일 ⇒ 메모리에 배치 ⇒ 사용가능한 CPU 코어에 실행할 수 있는 과정을 살펴보려한다. 그림 1) 컴파일러를 통해 소스파일을 object 파일로 컴파일한다. 이렇게 함으로써 물리 메모리에 위치에 적재될 수 있다. 2) 링커(linker)를 통해 변환한 object 파일과 다른 object 파일을 결합해서 하나의 이진 실행파일로 만들어낸다. 여기서 결합되는 다른 object 파일에는 라이브러리도 포함될 수 있다. 3) 로더(loader)를 통해 결합해서 만든 실행파일을 메모리에 적재하고 CPU 코어에서 실행할 수 있도록 한다. 링커와 로더와 연관된 동작들을 재배치라고 하고 이는 프로그램 부분에 최종 주소를 할당하고 코드와 데이터를 해당 주소와 일치하도록 조정한다. 이렇게 함으로써..

OS Concepts 10th 2023.09.02

[Network] 2-7. 소켓 프로그래밍 : 네트워크 애플리케이션 생성

지금까지 중요한 네트워크 애플리케이션을 살펴봤다. 이번 절에서는 실제로 어떻게 네트워크 애플리케이션을 작성하는지 알아보자. 일반적인 네트워크 애플리케이션은 client와 server로 구성된다. 두 프로그램을 수행하면 client process, server process가 생성되고 두 프로세스가 소켓으로부터 읽고(read), 소켓에 쓰기(write)를 통해 서로 통신한다. 네트워크 애플리케이션을 생성할 때 개발자는 클라이언트 프로그램과 서버 프로그램 모두에 대한 코드를 작성해야 한다. 클라이언트-서버 애플리케이션의 형태 1) RFC에서 정의된 표준 프로토콜을 구현하는 애플리케이션 ⇒ 동작을 규정하는 규칙이 알려져 있어서 개방형(open)이라고도 불린다. 2) 개인의 독점적인 네트워크 애플리케이션 이번 ..

[DB] 14-3. B+ 트리 인덱스 파일

인덱스 순차 파일 구조의 가장 큰 단점은 파일이 커질수록 인덱스를 찾아내는 성능과 데이터를 연속적으로 스캔하는 성능이 감소한다는 점이다. 이러한 성능 감소는 파일을 재구성하면 제거할 수 있지만 빈번한 재구성은 바람직하지 않다. 데이터의 삽입과 삭제가 이뤄져도 성능을 유지하는 몇몇 인덱스 구조 중에서 B+ Tree 인덱스(B+ Tree index) 구조를 가장 널리 사용하고 있다. B+ Tree 인덱스(B+ Tree index)는 트리의 루트 ⇒ 단말노드(리프노드) 모든 경로의 길이가 동일한 균형 트리(balanced tree)이다. 루트 노드를 제외한 비 단말 노드는 [n/2] ~ n개의 자식을 갖고 있고 이때 n은 특정한 트리에 대해 고정된 값이다. 루트는 2 ~ n개의 자식을 갖고 있다. B+ Tre..

[Docker] Dockerfile References - .dockerignore file

docker CLI가 docker daemon에게 명령문들(context)을 전달하기 전에 명령문(context)의 root 디렉토리에 있는 .dockerignore 파일을 먼저 살펴본다. 만약에 .dockerignore 파일이 존재한다면, CLI(Command Line Interface)는 .dockerignore 파일에 적혀있는 패턴과 일치하는 파일 또는 디렉토리들을 제외하기 위해서 명령문(context)들을 수정한다. 이를 통해 불필요하게 전송하는 용량이 큰 파일 또는 민감한 파일을 daemon에 전송하는 걸 막을 수 있다. 그런 파일들을 daemon에 전송해야 한다면 ADD 또는 COPY 명령어를 사용해서 이미지에 추가하면 된다. CLI(Command Line Interface)는 .dockeri..

Docker 2023.08.23

[Docker] Dockerfile reference - Environment Replacement

Dockerfile에서 Enviornment 변수(ENV 명령어로 선언됨)를 사용하여 특정 명령에서 변수를 사용할 수 있다. Environment 변수는 Dockerfile에서 $변수이름 또는 ${변수이름}으로 표현할 수 있다. 둘 다 같은 의미를 표현하고 괄호를 사용한 경우 일반적으로 공백이 없는 변수 이름과 관련된 문제를 해결하는 데 사용된다. (ex. ${변수이름}_bar) ${변수이름} 구문은 아래와 같이 표준 bash 수정자(modifier)를 지원한다. ${변수: -word} : 변수가 설정되어 있다면 지정한 변수를 출력한다. 변수가 설정되지 않았다면 word값을 출력한다. ${변수: +word} : 변수가 설정되어 있다면 word를 출력한다. 변수가 설정되지 않았다면 지정한 변수를 출력한다...

Docker 2023.08.23

[Docker] Dockerfile reference - Format, Parser Directives

출처 Docker는 Dockerfile이라는 설명서를 읽어서 이미지를 자동으로 빌드할 수 있다. 즉, 도커는 이미지를 만들기 위한 파일이다. Dockerfile은 이미지를 조립할 수 있는 모든 커맨드들을 갖고 있는 텍스트 문서다. 이번 페이지에서는 Dockerfile에서 사용할 수 있는 커맨드들을 살펴볼 것이다. Format # 주석 명령어 인자 INSTRUCTION arguments 명령어 : 대소문자를 가리지 않지만 인자(argument)와 구분하기 위해 주로 `대문자`를 사용한다. FROM 명령 도커는 Dockerfile에 적혀있는 순서대로 명령(instruction)들을 실행한다. 이때 무조건 FROM 명령을 가장 먼저 실행해야 한다. FROM 명령은 parser, directives, comme..

Docker 2023.08.21