[bash: sed] 16진수값(hex) 대체하기
By 반달가면 | 2017년 11월 14일 |
sed에서 문자열이 아니라 16진수값을 대체할 수도 있다. 따라서 텍스트 파일뿐만 아니라 바이너리 파일에 대해서도 대체 기능을 사용할 수 있다(sed를 이용한 문자열 대체의 기본은 이전 게시물을 참고하자. 여기로). 아래의 예시를 보자. # my_file.dat에서 모든 0xff를 0xf0으로 대체, my_file.mod.dat로 저장 sed 's/\xff/\xf0/g' my_file.dat > my_file.mod.dat 16진수를 나타내기 위해 'x'를 사용하는데, 문자 x를 의미하는 것이 아니므로 역슬래시(\)를 추가해 주어야 한다. 즉 \xff는 0xff를 의미하게 된다. 만약 연속되는 16진수값을 대체할 경우에는 각 값마다 \x를 붙인다. 아래의 예시를 보자. # my_fi
리눅스에서 ZFS 데이터 무결성 검사
By 반달가면 | 2018년 6월 26일 |
ZFS 설치, zpool 생성, 파일 시스템 생성 등 기본적인 작업은 이전 게시물을 참고하자. 여기로 ZFS에 저장된 데이터에 자주 접근할 경우에는 입출력 과정에서 오류를 자동으로 수정하기 때문에 별 문제가 없지만, 아주 가끔씩 접근하는 데이터의 경우에는 긴 시간동안 해당 데이터의 검증이 이루어지지 않은 채 방치될 수 있다. 이런 상황을 고려해서 수동으로 모든 데이터를 읽어서 무결성을 검증하고 오류를 수정하는 기능이 바로 scrub이다. 예를 들어 my_test_pool이라는 zpool에 대해 scrub 작업을 하려면 터미널창에서 아래와 같이 입력한다. 현재 사용중인 zpool에 대해 수행해도 문제가 없으므로 부담 없이 수행해도 된다. # my_test_pool에 scrub 작업 시작 su
[라즈베리파이] 프로세스: 태스크디스크립터(프로세스 실행 시각 정보)
By Guillermo Austin Kim | 2019년 1월 31일 |
태스크 디스크립터에는 프로세스 실행 시각 정보를 알 수 있는 멤버들이 있습니다. u64 utime; 유저 모드에서 프로세스 실행한 시각을 표현합니다. 이 멤버는 account_user_time() 함수 6번째 줄 코드에서 변경됩니다.1 void account_user_time(struct task_struct *p, u64 cputime)2 {3 int index;45 /* Add user time to process. */6 p->utime += cputime; u64 stime; 커널 모드에서 프로세스가 실행한 시각을 표현합니다. 이 멤버는 다음 코드와 같이 account_system_index_time() 함수에서 변경됩니다.1 void account_system_index_time(s
[라즈베리파이] 동기화 - 스핀락(spinlock) 소개
By Guillermo Austin Kim | 2018년 12월 21일 |
리눅스 커널에서 가장 많이 쓰는 동기화 기법 중 하나가 스핀락입니다. 먼저 스핀락의 특징을 알아봅시다. 1. 뮤텍스락 비해 구현 복잡도가 낮습니다.2. spin_lock_irq(), spin_lock_irq_save() 등등 추가 기능이 포함된 함수를 제공합니다.3. 스핀락 구현부는 아키텍처에 의존적입니다. ARM, ARM64 그리고 x86 CPU에 따라 구현부가 다릅니다. 스핀락 동작을 제대로 이해하기 위해선 어셈블리 코드를 분석해야 합니다. 임계 영역에 특정 프로세스에 접근하기 위해서 임계 영역 코드 구간에 스핀락을 걸어 다른 프로세스 접근을 막아야 합니다. 이를 위해 다음과 같은 함수를 호출해야 합니다.static DEFINE_SPINLOCK(static_spinlock);void kernel_fu