- Today
- Total
목록Linux (11)
Byeo
accept system call은 established된 connection에 대해서 fd를 할당해 userspace에게 제공합니다. 그러면 3-way handshake의 TCP_SYN은 누가 처리할까요? 한 번 그 과정을 알아봅니다. 단, tcp code만 살펴볼 예정이고, device driver와 ip layer는 스킵합니다. 나중에 read system call에서 깊이 다루게 될 것 같습니다. ★ 이 로직은 application에 의해서 trigger되는 로직이 아닙니다! NIC이 packet을 수신하여 interrupt가 발생했고, device driver가 이를 처리하기 위해 trigger되는 로직(으로 예상을 하고있고, 나중에 read에서 확인할 예정)입니다! 1. tcp_v4_rcvtc..
개요Blocking I/O의 동작 방법을 공부해 봅니다. (LDD (https://www.makelinux.net/ldd3/) 3판 section 6.2 요약) sys_accept을 공부하다가 blocking I/O에 대해서는 따로 간단히 정리를 해보면 좋겠다 싶어서 작성하게 되었습니다. Blocking I/O 하드웨어 장비는 언제나 작업을 처리할 수 있는 것은 아니다. 예를 들어, NIC을 통해서 data를 내보내고 싶은데 (send, TX), 이미 수많은 작업들이 쌓여있어서 하드웨어가 이를 수용하지 못할 수 있다. 반대로, application이 무언가 data를 받기를 기대하는데 (recv, RX) 실제로는 NIC에 들어온 data가 없을 수도 있다. 하지만 우리가 작성하는 프로그램은 하드웨어 상..
accept system call의 개요와 관련된 내용은 이전 포스트에 정리되어 있습니다.: https://byeo.tistory.com/entry/accept-system-call-Intro accept system call 0 - Intro일반적인 BSD Socket API는 server가 socket을 생성하고 bind 하고 listen 하면, 그다음은 accept을 수행합니다. 이 accept은 client가 연결 요청을 시도 함으로 인해 listen queue에 차있는 established packet을 꺼내온byeo.tistory.com 언제나 그렇듯, __sys_accept에서 시작합니다. 단, 함수 명의 끝에 4가 붙어있습니다.0. Parameteraccpet의 parameter는 조금 특..
이전 포스트 (bind system call 1: __sys_bind)https://byeo.tistory.com/entry/bind-system-call-1 bind system call 1 (__sys_bind)BSD socket API에서 socket을 생성한 뒤에는 server-side 측에서 bind를 실행합니다. bind는 나의 ip:port를 socket과 연결하는 역할을 수행하죠. 이 번에는 BSD socket API중에서 bind를 분석해보려고 합니다. 이전byeo.tistory.com 현재까지의 흐름도3. inet_bind__sys_bind에서 그 다음으로 호출하는 함수는 sock->ops->bind였습니다.// net/socket.c/__sys_bind() :1693 err =..
BSD socket API에서 socket을 생성한 뒤에는 server-side 측에서 bind를 실행합니다. bind는 나의 ip:port를 socket과 연결하는 역할을 수행하죠. 이 번에는 BSD socket API중에서 bind를 분석해보려고 합니다. 이전 포스트 (socket system call)https://byeo.tistory.com/entry/socket-system-call socket system call 1 (syscall_socket ~ __sock_create)int socket(int domain, int type, int protocol); socket 시스템 콜의 동작을 한 번 들여다봅니다! https://man7.org/linux/man-pages/man2/socket...
이전 포스트: https://byeo.tistory.com/entry/socket-system-call-3 socket system call 3 (tcp_v4_init_sock)이전 포스트: https://byeo.tistory.com/entry/socket-system-call-2 socket system call 2 이전 포스트: https://byeo.tistory.com/entry/socket-system-call socket system call 1 int socket(int domain, int type, int protocol); socket 시스템 콜의 동byeo.tistory.com 7. sock_map_fd마지막으로 sock_map_fd 함수를 거칩니다. 이 함수는 기존에 tcp_ip..
QEMU를 통해 생성한 VM이 외부와 통신이 가능하도록 설정해 봅니다. 1. QEMU script 작성qemu를 실행하는 스크립트를 다음과 같이 작성합니다.#!/bin/bashqemu-system-x86_64 \ -m 2G \ -smp cores=4 \ -kernel ./arch/x86/boot/bzImage \ -drive file=image/ubuntu-from-debootstrap.img,format=raw \ -append "root=/dev/sda rw console=ttyS0" \ -netdev tap,id=byeonet0,ifname=byeotap0 \ -device e1000,netdev=byeonet0..
개요 리눅스 코드를 살펴보고 구현해보는 과정을 간단히 체험해보기 위해서 가장 쉬운 시스템 콜 추가하기를 해봅니다. 해당 과정을 위해 [블로그]와 [커널 문서]를 참고하였습니다. 커널 문서에서는 시스템 콜 구현 디자인 가이드라인을 제공하고 있습니다. 내용 1. syscall_64.tbl linux-5.15/arch/x86/entry/syscalls/syscall_64.tbl 파일에는 x86 아키텍쳐에서 사용할 수 있는 시스템콜이 나열되어 있습니다. 형태는 다음과 같습니다. # The format is: # 가장 마지막에 있는 448 다음에 우리가 추가할 시스템 콜 이름과 실제 커널 내에서 호출할 함수 명을 나열해줍시다. 449commonbyeo_hellosys_byeo_hello 2. sys_byeo_he..
Linux server의 시스템 상태를 확인하기 위해서 많은 사람들이 많이 쓰는 응용은 아마도 top 일 거예요. 그런데 top은 CPU / Memory 사용량을 전체 시스템 뿐만 아니라 개별 process 마다 보여주는데 반해, I/O와 관련된 정보는 찾기가 쉽지 않습니다. 윈도우는 ctrl+alt+delete로 한 눈에 쉽게 보여주는데 말이죠. 그래서 이 포스트에서는 네트워크 트래픽 관측 툴들 몇 가지를 직접 사용해보고 정리해보려고 합니다. 구글에서 찾아보면 정말 많은 툴들이 존재합니다만, 각각을 깊이 다뤄본다기 보다는 간단하게 만져보고 장단점을 정리해보려고 합니다. 각 툴들의 캡처 화면과 내용을 살펴보시면서 마음에 드는 툴을 고르는데 도움이 되었으면 좋겠습니다~. 1개의 도구를 제외하고는 CLI 기..
4. Vimrc-3 (Folding) 이번 포스트에서는 코딩의 능률을 올릴 수 있는 folding에 대해서 정리해보도록 하겠습니다. 목차 Folding (폴딩) 이란? Folding Enable Folding Method Folding 단축키 Folding Configuration 이 글은 [vim tips: folding fun] 문서를 참고하여 제작하였습니다. Folding (폴딩) 이란? 폴딩이란, 아래 사진과 같이 특정 코드 영역을 숨기는 기능을 의미합니다. 만약 prime()함수가 기존에 다음과 같이 있었다고 가정해보죠. 개발 과정에서 이 prime함수를 더 이상 수정할 일이 없다면 숨겨도 괜찮을 것입니다. 이 때 폴딩을 하면 다음과 같이 코드 일부를 숨길 수 있습니다. 코드가 짧으면 모두 펼쳐..