본문 바로가기

Concepts124

File System - 출처: Operating System - Three Easy Pieces 개요만약 우리가 File system 을 구현해야 한다면 크게 2가지 측면을 고려해야 한다.Data strcutures: data와 metadata를 구성하기 위해 어떤 유형의 구조로 설계할것인가?Access methods: open(), read(), write() 등과 같은 process에 의한 호출을 어떻게 구조에 맵핑할것인가?전체 구조vsfs 파일 시스템의 데이터 구조를 설계한다고 가정해보자. 가장 먼저 해야할것은 무엇인가? 가장 먼저 해야하는것은 disk를 "block" 단위로 나누는것이다. 이 "block"을 4 KB 로 사용한다고 가정하자.위처럼 block에는 0 ~ N-1 주소가 부여되며 각 block의 크기는 4.. 2024. 11. 3.
HTTP 메시지 - 출처: HTTP 절대 가이드 - 메시지의 흐름HTTP 메시지는 HTTP 어플리케이션간의 주고 받는 데이터 블록이라고 할 수 있다. HTTP 메시지의 흐름 관련해서 인바운드, 아웃바운드 라는 용어를 종종 볼 수 있는데 그 의미는 아래와 같다.인바운드: 서버쪽으로 흐르는 방향을 말한다. 메시지가 클라이언트 -> 프록시1 -> 프록시2 -> 서버 처럼 이동한다면 이를 "인바운드로 이동"한다고 말한다.아웃바운드: 서버에서 클라이언트로 응답하는 방향을 말한다. 메시지가 서버 -> 프록시2 -> 프록시1 -> 클라이언트 처럼 이동한다면 이를 "아웃바운드로 이동"한다고 말한다.인바운드, 아웃바운드 뿐만 아니라 업스트림, 다운스트림이라는 개념도 존재한다. 업스트림, 다운스트림은 요청이냐 혹은 응답이냐에 따라 뒤바뀌.. 2024. 7. 7.
URL과 리소스 - 출처: HTTP 절대 가이드 - URIURI는 인터네의 리소스를 가리키는 표준 이름이다. URI 에는 URL과 URN 이 있다.URL: 어디있는지 설명해서 리소스를 식별URN: 어디에 존재하는지는 상관없이 이름으로 식별만약 http://joes-hardware.com/seasonal/index-fall.html 과 같은 URL이 있다면  아래와 같이 나눌 수 있다.http: URL의 스킴joes-hardware.com: 서버의 위치/seasonal/index-fall.html: 리소스의 경로- URL 의 문법대부분의 스킴은 일반 URL의 문법을 따르며, 서로 다른 URL 스킴도 형태와 문법이 비슷하다. URL의 기본 문법은  "scheme://ID:PW@host:port/path;param?query.. 2024. 7. 1.
HTTP 개요 - 출처: HTTP 절대 가이드 - HTTP 개요HTTP 는 신뢰성 있는 데이터 전송 protocol 을 사용하여 손상없이 순서를 보장하면서 메시지를 전송한다. HTTP 가 웹 트래픽을 어떻게 전송하는지 알아보도록 하자.- 리소스웹 리소스라는 말을 들어봤을것이다. 리소스는 서버가 갖고 있는 웹 컨텐츠라고 할 수 있다. 리소스는 정적 리소스와 동적 리소스로 나눌 수 있다.정적 리소스: text, HTML, jpeg, avi, 등이 있다. 이런 리소스들은 같은 이름으로 내용물을 변경하지 않는다면 같은 url 에 대해 항상 같은 컨텐츠를 반환한다.동적 리소스: 사용자가 요청 시각에 따라 다른 컨텐츠를 생성하는 리소스를 말한다. 예를 들어 주식 거래 그래프의 경우 시간 흐름에 따라 다른 컨텐츠를 사용자에게 보여.. 2024. 6. 30.
Limited Direct Execution - 출처: Operating System - Three Easy Pieces - 개요CPU 가상화의 기본적인 개념은 하나의 process를 잠시 동안 실행하고, 그 후 다른 process 를 실행하는식으로 진행하는 time sharing 이다. 가상화의 가장 중요한 요소는performance: 추가적인 overhead 없이 가상화 구현control: CPU 에 대한 제어를 하면서 효율적으로 process 실행한다. 제어를 하지 않으면 하나의 process 가 machin 을 영원히 점유하거나 접근하면 안되는 자원에 접근할 수 있게 된다.결국 올바른 제어를 하면서 좋은 성능을 내는것이 OS 의 주요 과제이다.- Limited Direct Execution프로그램을 가장 빠르게 실행하는 방법은 CPU 상에.. 2024. 5. 25.
Process API - 출처: Operating System - Three Easy Pieces - 개요UNIX 시스템은 fork()와 exec() system call 을 통해 process를 생성한다. 또한 wait() 을 사용하면 process 를 대기할 수도 있다. 이와 관련된 실질적인 예제를 더 자세히 살펴보면서 실제 이런 system call 들이 어떤 방식으로 사용되는지 감을 익혀보자.- fork() system callfork() system call 은 새로운 process를 생성하는데 사용된다. #include #include #include int main(int argc, char *argv[]) { printf("hello world (pid:%d)\n", (int) getpid()); i.. 2024. 5. 15.
Process Abstraction - 출처: Operating System - Three Easy Pieces- 개요Process 란 무엇인가? 한마디로 정의하기에는 너무나 중요하고 복잡하지만 그중 가장 간단하고 직관적인 정의는 "프로그램 을 실행하는것"이다. 프로그램 자체는 생명주기를 갖지 않는다. 프로그램은 저장 장치(ex - Disk)에 존재하는데, 사용자가 실행하면 OS는 이를 가져와서 실행한다. 우리는 프로그램을 1개만 실행하지 않는다. 웹 브라우저를 켜놓고 게임을 하면서 음악을 듣는다. 시스템은 어느 CPU가 여유가 있어서 사용가능한지 신경쓰지 않는다. 이렇게 CPU 보다 많은 프로그램을 실행할 수 있는것은 OS가 CPU 가상화를 제공해서 가능하다.어떻게 CPU 가상화를 하길래 이런 상황이 가능한가? 여러 기술이 있겠지만 하나.. 2024. 5. 5.
Introduction OS - 출처: Operating Systems - Three Easy Pieces개요Program을 실행한다는 것은 무엇인가? 많은 정의가 있을 수 있지만 그중 가장 직관적인 정의를 꼽으라면 "명령어를 수행하는것"이라고 할 수 있을것이다. OS는 Program을 수행할 때 다음과 같은 과정을 수행한다.Processor가 Memory로 부터 명령어(instruction)을 가져온다.이를 해석(decode)하고 실행(execute)한다.위 과정을 반복한다.OS의 가장 근본적인 책임은 많은 application 을 동시에 잘 수행될 수 있도록 하는것이다. 컴퓨터의 1 application이 1개의 memory만 점유하는것이 아니라 여러 개의 application이 memory를 공유한다. 또한 applicatio.. 2024. 5. 3.
Sharding - 개요 개발자가 샤딩이라는 용어를 접할 수 있는 가장 일반적인 분야는 DB인것 같다. DB 장비(instance) 1대가 감당할 수 있는 수준을 넘어서는 규모의 데이터를 처리해본적이 있다면 샤딩이라는 단어를 들어봤을것이다. 샤딩을 적용하면 전체 데이터가 여러 대의 장비로 분산되며, 이에 따라 자연스럽게 1대의 DB 서버가 받는 부하도 분산된다. 그런데 샤딩이 꼭 DB에만 샤딩이 적용되는것은 아니다. 공유 데이터에 대한 쓰기나 읽기 락 경합을 완화하기 위해 사용되기도 한다. Golang 에서 Map 을 사용한다고 가정해보자. 어떤 데이터를 DB로 부터 조회한 후, Map에 취합한다. 그런데 데이터가 커짐에 따라 속도가 생각만큼 나오질 않아 goroutine을 생성하고 취합을 빠르게 하려고 한다. CPU를.. 2024. 1. 13.
Fan-out, Fan-in - 출처: https://go.dev/blog/pipelines Go Concurrency Patterns: Pipelines and cancellation - The Go Programming Language Go Concurrency Patterns: Pipelines and cancellation Sameer Ajmani 13 March 2014 Introduction Go’s concurrency primitives make it easy to construct streaming data pipelines that make efficient use of I/O and multiple CPUs. This article presents examples o go.dev - 개요 Fan-out은 하나의 .. 2023. 11. 12.