[라즈베리파이] 프로세스: do_exit() 함수 분석
By Guillermo Austin Kim | 2019년 1월 18일 |
do_exit() 함수로 커널이 프로세스를 종료 시키는 세부 동작 못지 않게 프로세스가 종료되는 흐름을 파악하는 것이 중요합니다. 그 이유는 무엇일까요? 유저 어플리케이션 프로세스나 커널 프로세스가 예외 상황에서 의도하지 않게 종료해서 문제가 발생하는 경우가 있습니다. 이런 문제를 만났을 때 커널 어느 함수부터 분석을 해야할 지 결정할 수 있습니다. 이번에는 do_exit() 함수가 어떻게 실행되는지 알아봅시다. - exit() 시스템 콜 실행유저 어플리케이션 프로세스가 자신을 종료하려면 리눅스 저수준 함수로 exit() 함수를 호출합니다. 이 때 시스템 콜을 발생시킨 다음 sys_group_exit() 시스템콜 핸들러를 실행합니다. - 다른 프로세스가 프로세스 종료 시그널을 전달했을 경우프로세스
[bash: sed] 대용량 파일에서 특정 위치의 행만 출력하기
By 반달가면 | 2017년 1월 13일 |
파일에서 특정한 행을 출력하기 위해서 sed 명령을 활용하게 되는데, 통상 아래의 예시와 같은 형태로 쓰게 된다. # my_data.txt 파일에서 124번째 행을 출력 sed -n 124p my_data.txt # my_data.txt 파일에서 100번째 행부터 110번째 행까지 출력 sed -n 100,110p my_data.txt 파일 용량이 별로 크지 않으면 위와 같은 형태로도 별 문제가 없다. 그러나 수백MB 이상의 대용량 파일에서 특정 부분을 출력해야 하는 경우에, 특히 이런 작업을 여러번 반복해야 하는 경우에는 상당한 시간이 걸릴 수 있다. 예를 들어 500MB 파일에서 100번째 행만 출력하는 상황이라도, sed는 파일을 처음부터 끝까지 다 읽은 후에 작업을 종료하기
[리눅스커널] 스케줄링: 선점 스케줄링(Preemptive Scheduling)이란 무엇일까?
By Guillermo Austin Kim | 2019년 9월 15일 |
선점 스케줄링은 다음과 같이 정의내릴 수 있습니다. CPU에서 실행 중인 프로세스를 비우고 새로운 프로세스를 CPU에서 실행시킴 선점 스케줄링에 대한 이해를 돕기 위해 야구에서 투수 교체를 하는 과정을 예를 들겠습니다. 마운드에 A란 투수가 있다고 가정합시다. A란 투수는 열심히 공을 던지고 있습니다. 감독은 투수가 마운드에서 제대로 공을 던지고 있는지 계속 관찰합니다. 제구는 좋은지 구속은 제대로 나오고 있는지 점검합니다. 그런데 시간이 흘러 B, C와 D란 투수가 자신이 공을 던지고 싶다는 의사와 함께 불펜에서 몸을 풀기 시작했습니다. B, C와 D란 투수도 A와 같은 기량의 투수입니다. 감독은 A와 B, C, D 투수를 비교합니다. 만약 B, C, D 투수 중에 A보다 잘 던진다고(
리눅스에서 디스크 용량이 충분한데 더 이상 쓰기가 안 되는 경우 발생
By 반달가면 | 2017년 7월 26일 |
제목처럼, 리눅스에서 디스크에 충분한 용량이 있음에도 불구하고 새로 파일을 쓰려니까 공간이 없다는 오류 메시지(no space left on device) 메시지가 발생하는 경우가 있다. 사실 거의 없긴 하다. 개인적으로는 최근에 딱 한번 있었다. --; 디스크 용량이 충분한데도 새로 파일을 쓰지 못하는 이유는 바로 아이노드(inode) 고갈 때문이었다. 아이노드는 유닉스/리눅스 파일 시스템에서 파일 또는 디렉토리의 속성과 데이터 위치 등을 가지고 있다. 즉, 디렉토리나 파일은 각각 그에 상응하는 아이노드가 존재하게 된다. 아이노드의 수는 유한하기 때문에, 작은 크기의 파일이 무수히 많은 상황이 되면 사용 가능한 아이노드가 더 이상 없게 되어서 디스크의 남은 공간과 무관하게 파일/디렉토리 생