본문 바로가기

Computer Science/Linux

[Linux] 여러개의 process가 socket을 공유할 수 있는가? 답은 공유 할 수 있다. 다만 제한적인 의미를 가지고 있다. fork()를 이용하여 process를 생성한 경우 child process는 parent process의 file descriptor들을 모두 복사한다. 그러므로 child process는 parent process의 socket을 사용할 수 있으므로 socket은 multiple process에 의해서 사용될 수 있다. 더보기
[Linux] File descriptor and Inode 유닉스는 파일의 내용과 그 파일에 대한 정보가 완전히 분리된 구조를 가지고 있다. 각각의 파일들은 바이트들의 시퀀스로 이루어져 있을 뿐, EOF 구분자나 파일의 길이 같은 컨트롤 정보를 전혀 가지고 있지 않다. 파일시스템이 파일을 관리하기 위해서 필요한 정보를 가지고 있는 자료구조를 inode라고 한다. 리눅스의 모든 파일은 inode를 가지고 있다. 더보기
[Linux] 커널 쓰레드(Kernel Thread)란? 커널 쓰레드는 유저 프로세스와는 다른 개념으로 유닉스 시스템에는 몇 개의 특별한 권한을 가진 프로세스가 존재하는데 이를 커널 쓰레드라고 한다. 커널 쓰레드는 다음과 같은 3가지 특징을 가지고 있다. 1. 커널 쓰레드는 커널 모드의 커널 스페이스에서 실행된다.2. 커널 쓰레드는 사용자와 상호작용을 하지 않고, 그러므로 터미널 디바이스가 필요없다.3. 커널 쓰레드는 대게 시스템이 시작될 때 생성되고 시스템이 종료될 때까지 살아있다. 더보기
[Linux] 32bit 리눅스에서 64bit 나눗셈, 나머지 계산, do_div() 32bit 리눅스 커널소스를 수정하는 과정에서 unsinged 64bit int를 unsigned 32bit int로 나누기를 시도했다. 그러자 결과는 :undefined reference to `__udivdi3' 라는 에러 메시지가 나를 기다린다. __udivdi3() 함수는 glibc에 뭐 최근에 추가된 함수라던데 그래서 그 라이브러리를 추가하고 컴파일 할 때 static link해주면 된다는데. 커널 컴파일하는데 Makefile을 손대는 것은 곧 지옥이라 패스^^ 그래서 내가 직접 32bit씩 끊어서 계산하려고 했다. 하지만 역시 나따위가 생각하는 것은 누구나 생각할 수 있는 것, 32bit 리눅스에 이미 구현이 되어있었다! 나머지 = do_div( u64 피제수, u32 제수); 몫은 피제수가 .. 더보기
[Linux] make menuconfig 에러 1. Make menuconfig에 대한 간단한 설명 make menuconfig는 리눅스 커널을 컴파일 할 때 필요한 설정 내용을 저장하고 있는 파일을 만드는 명령이다.그냥 make config도 있지만 make menuconfig는 그래픽 configuration 모드로 사용자가 좀 더 쉽게 할 수 있도록 한다. 2. 자 이제 에러를 잡으러 가자!! 난 make menuconfig 만 했을 뿐인데 에러가 넘쳐난다!!!!! 알고봤더니 libncurses library가 설치되어 있지 않아서 발생한 에러였다.뭔가 에러가 발생한 소스파일 이름이나 undefined reference 이름들만 보더라도 그래픽 관련 소스임을 짐작 할 수 있다.해결책은 물론 libncurses library 설치!! 2. lib.. 더보기
[Linux] open()의 O_NONBLOCK 옵션 주로 시리얼 통신에서 많이 쓰이는 옵션인데요. 원문을 보자면 When opening a FIFO with O_RDONLY or O_WRONLY set: If O_NONBLOCK is set: An open() for reading only will return without delay. An open() for writing only will return an error if no process currently has the file open for reading. If O_NONBLOCK is clear: An open() for reading only will block the calling thread until a thread opens the file for writing. An open() .. 더보기
[Linux] 리눅스 커널 버전 확인 리눅스의 커널 버전을 확인 하는 방법에는 여러가지가 있습니다. 저는 그 중에서 범용적인 2가지 방법을 알려 드리려고 합니다. 방법 1. uname -r uname은 시스템의 정보를 출력하는 명령으로, -r 옵션은 kernel의 release 버전을 출력하는 옵션입니다. uname -r 실행결과 방법 2. cat /proc/version cat은 파일의 내용을 보여주는 명령어죠. version이라는 파일은 현재 linux kernel의 version을 저장하고 있는 파일입니다. cat /proc/version 실행결과 수정된 특정 커널에서 안될 수 있는 다른 방법을 쓰느라 고생하지 마시고 두가지만 기억하세요. 혹시 이 방법이 동작하지 않는다면 댓글을 남겨주시면 도움 드리겠습니다. 더보기
[Linux] clock source 확인하기 1. 현재 디바이스에서 사용가능한 clock의 종류 확인하기 cat /sys/devices/system/clocksource/clocksource0/available_clocksource 2. 현재 OS에서 사용중인 clock을 확인하기 위해서는 cat /sys/devices/system/clocksource/clocksource0/current_clocksource 사용중인 clock source를 변경하는 방법은 기억이 잘 안난다. 나중에 찾아서 추가하는 걸로! 더보기