[라즈베리파이] 시스템 콜 - 전체 흐름도 소개
By Guillermo Austin Kim | 2018년 11월 6일 |
이전에 소개한 시스템 콜 흐름도와 시스템 콜 동작은 그리 간단하지 않습니다. 시스템 콜 세부 동작을 알려면 다음 시스템 전체 흐름도를 이해해야 합니다. 다음 그림은 이번에 다룰 전체 시스템 콜 흐름도입니다. open(), write() 그리고 read() 함수는 파일을 열고 읽어서 쓰는 파일 입출력 동작이고, fork()와 exit() 함수는 프로세스 생성과 종료와 연관된 동작을 실행합니다. 이를 리눅스 저수준 함수라고 부릅니다. 다른 관점으로 GNU C 라이브러리로 진입하는 함수이며 이를 API(Application Programming Interface) 라고 부릅니다. 리눅스 시스템에서는 390여 개의 표준 함수들이 있는데 위 그림에서 대표적인 함수 5개를 표현한 것입니다. 라즈베리파이에서 다음
script - 리눅스에서 터미널창 작업 내용을 파일로 저장(갈무리)하기
By 반달가면 | 2018년 4월 10일 |
리눅스에서 터미널창에서 작업한 내용(명령어 입력, 결과 출력 등)을 파일로 저장(갈무리)하고 싶을 경우, script를 이용하면 되겠다. 아래의 예시를 보자. # 터미널창 작업 내용을 파일 terminal_log.txt 파일에 갈무리 script terminal_log.txt Script started, file is terminal_log.txt 작업을 마치고 갈무리를 중단하려면 컨트롤(ctrl) + d 키를 누르거나, 터미널창에서 exit라고 입력하면 된다. # 갈무리 종료 exit Script done, file is terminal_log.txt 이전에 저장했던 파일에 덧붙여서 저장(append)하고 싶을 경우에는 -a 옵션을 사용한다. # 터미널창 갈무리 시작, t
[라즈베리파이] 동기화 - 스핀락(spinlock): 첫 번째 스핀락 해제 시 동작(1)
By Guillermo Austin Kim | 2018년 12월 26일 |
스핀락을 해제할 때는 spin_unlock() 함수를 호출하는데 스핀락 인스턴스의 owner를 +1만큼 증감한다고 알고 있습니다.static inline void arch_spin_unlock(arch_spinlock_t *lock){smp_mb();lock->tickets.owner++;dsb_sev();}spin_unlock() 함수를 호출하면 여러 인라인 형태 함수로 연결되는데 실제 동작은 arch_spin_unlock() 함수가 수행합니다. [1] 번 프로세스가 스핀락을 해제할 때 스핀락 인스턴스인 owner를 +1증감합니다. [2] 프로세스는 Busy-waiting 동작으로 스핀락 인스턴스의 owner가 0x2가 될 때까지 무한루프를 돌고 있는 상태였습니다. 그런데 [2]번 프
xxd - 리눅스에서 바이너리 파일 내용을 16진수로 출력하기
By 반달가면 | 2017년 6월 19일 |
리눅스에서 바이너리 파일 내용을 16진수로 출력해야 할 경우 xxd라는 요긴한 도구가 있다. 아래의 예시를 보자. # data.bin 파일 내용 출력 xxd data.bin 0000000: 1f8b 0800 ... 0000010: e103 6abb ... ... 위와 같이 입력하면 통상 많이 볼 수 있는 바이너리 파일 편집기와 유사한 형식으로 내용을 출력해 준다. 기본 출력은 2바이트씩 묶어서 공백으로 구분해서 보여주는데, 만약 각 바이트마다 공백으로 구분하려면 -g 옵션을 추가해 주자. # data.bin 파일 내용 출력, 1바이트 단위로 구분 xxd -g 1 data.bin 0000000: 1f 8b 08 00 ... 0000010: e1 03 6a bb ... ...