[bash: while, if] 복잡한 조건에 따른 개별 작업 이후 공통된 작업이 있는 경우
By 반달가면 | 2017년 12월 21일 |
case 조건문을 사용하기 어려운 복잡한 여러개의 조건에 따라 뭔가 작업을 한 후에 공통된 작업이 있는 경우 어떻게 할 것인가에 대한 문제다. 하나의 변수에 대하여 여러 조건에 따라 작업을 하는 경우에는 case로 하면 되지만 변수가 다수일 경우에는 if와 elif를 계속 나열해야 하는 귀찮음이 생긴다. (case에 대한 내용은 이전 게시물을 참고하자. 여기로) 간단한 예시를 생각해 보자. 앞에서 있었던 작업에 의해 두가지 변수 a, b의 값이 설정되는데 먼저 a에 대해 우선적으로 특정 조건을 만족하는지 보고 만족하지 않을 경우 b에 대해 특정 조건을 만족하는지 봐야 하는 경우다. # 변수 a의 값이 0이거나, 또는 변수 b의 값이 1인 경우에 따라 변수 c의 값을 설정 if [[ $a -eq
맥에서 사용하던 고장난 외장 하드 복원하기
By 지훈현서 | 2020년 8월 15일 |
요즘에야 클라우드에 많이들 백업을 해 놓기도 하지만,30년 전부터 별도의 하드에 백업을 받는 것이 버릇이 되어 있었습니다. 최근 까지 회사 맥미니에 연결해 놓고 4테라, 8테라 3.5인치 외장 하드디스크를 준비하여 rsync로 백업을 했었습니다.다른 것 보다도 20만장 이상 찍은 사진 원본들을 2중으로 백업을 받았습니다. 아이들 어릴적 사진이 있어 언젠가은퇴하면 따로 정리해야지.. 하는 생각으로 말이지요. 문제는 어느날 .. 아마도 정전 때문이었으리라 생각이 들기도 하는데 맥에서 전혀 읽지 못하는 것이었습니다.한개만 망가졌으면 몰라도 두 개가 동시에 안되는 것이었습니다.식겁해서 디스크 유틸리티로 이것 저것 시도를 해 보았지만 모두 실패를 했습니다.파일시스템은 최신 Apple File System을 사용하
[리눅스커널][태스크릿] 태스크릿(struct tasklet_struct)은 어떻게 등록할까?
By Guillermo Austin Kim | 2019년 4월 10일 |
먼저 태스크릿을 등록하는 2가지 방법을 소개합니다.1. 태스크릿 전역 변수 선언 : DECLARE_TASKLET() 혹은 DECLARE_TASKLET_DISABLED() 함수 호출2. 태스크릿 초기화 함수 호출 : tasklet_init() 함수 DECLARE_TASKLET() 혹은 DECLARE_TASKLET_DISABLED() 함수로 태스크릿 등록하기 DECLARE_TASKLET() 혹은 DECLARE_TASKLET_DISABLED() 매크로를 써서 태스크릿을 초기화하는 방법입니다. 태스크릿 전역 변수는 컴파일 타임에 자료구조가 정해집니다.[https://elixir.bootlin.com/linux/v4.19.30/source/include/linux/interrupt.h]1 #define DE
인터럽트(3) - 인터럽트 발생을 막고 싶을 때
By Guillermo Austin Kim | 2018년 2월 10일 |
어떤 코드 흐름에서는 인터럽트가 발생하면 안될 경우가 있습니다. 예를 들면 프로세서가 슬립에 진입할 때 각 디바이스 드라이버를 서스팬스 시키는 처리 도중 인터럽가 뜨면 안됩니다. 아래는 어셈블코드에서 호출되는 코드인데, 유저 모드에서 권한이 없는 가상 메모리 공간에 접근하면 ARM 프로세스가 감지하고예외(Exception)을 발생시킵니다. 이 때 bad_mode 함수가 호출되는데, 결국 panic 함수를 호출해서 커널 패닉을 유발시킵니다. 커널 패닉을 시키기 바로 전 local_irq_disable 함수를 호출해서 인터럽트를 아예 막아 버립니다.[arch/arm/kernel/traps.c]asmlinkage void bad_mode(struct pt_regs *regs, int reason){ co