전체 글

전체 글

    [Network Programming with Rust] Week 6

    Assigned Pages: 236 ~ 240p / 117 ~ 126p Appendix - Awaiting the future 해당 책으로는 더 이상 나가지 않고 추가적으로 공부를 더 하기 위해 스터디원끼리 토의를 통해 「Rust for Rustaceans」 책의 비동기 부분을 더 공부하기로 했다. Chap 8. ASYNCHRONOUS PROGRAMMING The contents I wrote with markdown are in github repository. Here is the link.

    [LKM] Character Device Driver

    Kernel version: 5.14.17 What is a device driver? device driver는 하나의 컴퓨터 프로그램이다. 컴퓨터나 오토마톤에 접목되어 특정 타입의 device를 동작시키거나 조종한다. device는 우리가 생각하는 여러 주변 하드웨어 기기들을 일컫는 말이다. 키보드, 마우스, 모니터, USB,... 등등 많은 종류의 하드웨어가 컴퓨터와 통신하는데 주로 sequential bytes의 형태로 이루어진다. 이 말은 즉 linux에서는 모든 devices가 file이라고 본다. ([Kernel of Linux] 강의 정리 내용을 참고하자.) 결국 우리가 만들게 될 device driver는 device라는 하나의 파일을 컨트롤하기 위한 프로그램을 만드는 것이다. devic..

    [Network Programming with Rust] Week 5

    Assigned Pages: 183~190p Chapter 7. Asynchronous Network Programming Using Tokio [Part] Heading to tokio - Socket multiplexing in tokio The contents I wrote with markdown are in github repository. Here is the link.

    [Network Programming with Rust] Week 4

    Assigned Pages: 155~159p Chapter 6. Taking HTTP in the Internet [Part] Introducing reqwest The contents I wrote with markdown are in github repository. Here is the link.

    [Network Programming with Rust] Week 3

    Assigned Pages: 95~101p Chapter 4. Data Serialization, Deserialization, and Parsing [Part] Custom serialization and deserialization The contents I wrote with markdown are in github repository. Here is the link.

    [Kernel of Linux] 14. Memory Management

    지난 강의 요약 - File System (3) Linux는 Unix와는 달리 많은 종류의 FS을 커버할 수 있도록 만들어졌다. 그래서 실제 physical FS layer 위에 유저를 위한 standard를 제공하기 위한 VFS(Virtual FS) layer를 얹어놨다. VFS는 standard objects 4가지를 통해 어떤 FS든지 정의할 수 있도록 했다. superblock object / inode object / file object / dentry object. dentry를 제외한 나머지 object들은 이전에도 많이 했으니 넘어가고 dentry에 대해 알아보자. dentry는 directory entry로 단순히 말해 path(name) components의 inode를 저장하는 것을..

    [Kernel of Linux] 13. File System (3)

    지난 강의 요약 - File System (2) 디스크는 inode와 data를 저장하는 부분으로 나뉘어 있다. inode 0번째는 root directory를 의미한다. open("/a/b") 이렇게 시스템 콜이 불렸다면 처음에 root directory file을 열어서 밑에 있는 inode 포인터 리스트를 가져온다. 파일 중 a file을 가리키는 inode 포인터를 찾았다면 또 거기서 아래로 내려가 찾는다. 그렇게 b file까지 오게 되면 b를 위한 offset을 저장할 file struct를 만들고 나서 이를 가리키는 포인터를 커널에 있는 u_ofile[] array에 저장한다. 포인터를 저장한 이 array의 index를 바로 fd(file descriptor)라고 한다. 디스크에 데이터를 ..

    [Network Programming with Rust] Week 2

    맡은 범위: 71~76p Chapter 3. TCP and UDP Using Rust The contents I wrote with markdown are in github repository. Here is the link.

    [Kernel of Linux] 12. File System (2)

    지난 강의 요약 - File System (1) linux에는 파일과 파일을 표현하는 메타 데이터가 있다. 메타 데이터에는 여러 정보가 들어있는데 그중에서 중요한 정보 중 하나로 offset이 있다. 파일은 sequence of bytes라고 정의하고 있는 만큼 파일을 읽을 때 sequential 하게 읽는다. 이때 offset을 보고 어디서부터 읽을지 결정한다. 파일을 storage에 저장할 때 연속적으로 저장하는 방식을 사용할 수 있다. 이 방식의 장점은 access 할 때 빠르게 접근할 수 있지만 단점으로는 외부 단편화(external fragmentation)가 발생하여 관리가 어렵다. 다른 저장 방식으로는 storage를 일정 크기로 잘라놓은 다음에 파일이 저장된 섹터의 주소를 기억하는 것이 있..

    [Network Programming with Rust] Week 1

    Chapter 1. Introduction to Client/Server Networking 1. A brief history of networks 진화된 통신 수단. 새로운 통신 수단으로 컴퓨터가 대두됨. 컴퓨터끼리의 통신이 점차 커져 하나의 거대한 네트워크가 구성될 수 있었음. 지리적 관점에서 구성되기도 하는데 지역에 따라 구분하면 LAN(Local Area Network), 이런 LAN이 뭉치게 되면 WAN(Wide Area Network)가 된다. 2. Layering in networks 컴퓨터 과학에서는 종종 하나의 문제를 작게 쪼개어 본다. 이제 필요한 건 큰 문제를 해결하기 위해 쪼개진 문제들의 해결책들을 잘 조화시켜 만들어낸 규칙들의 집합이다. 이 규칙들의 집합을 사전에 약속된 포맷과 함..