[라즈베리파이] 스케줄링: 컨택스트 스위치(Context Switch)이란
By Guillermo Austin Kim | 2019년 2월 2일 |
CPU에서 실행 중인 프로세스를 비우고 새로운 프로세스를 CPU에서 실행시키는 과정을 컨택스트 스위칭이라고 합니다. 컨택스트 스위치란다음 그림을 보면서 컨택스트 스위칭란 용어에 대해서 살펴봅시다. CPU에서 E란 프로세스가 실행 중이라고 가정합시다. 어떤 프로세스가 CPU에서 실행 중이란 의미는 CPU 레지스터 세트에 프로세스 실행 정보가 채워져 있다는 의미입니다. 어떤 코드가 실행 중이란 의미는 ARM 코어 PC(프로그램 카운터)에 현재 실행 중인 주소를 가르키고 있다는 것입니다. E란 프로세스는 계속 ARM 코어에서 실행을 하려고 하지만 A, B, C, D 프로세스들이 실행 요청을 합니다. 스케줄러는 ARM 코어에서 실행 중인 E란 프로세스와 A, B, C, D 프로세스들과 우선 순위를 비교합니다
[리눅스커널] 인터럽트 후반부 기법을 적용하는 이유
By Guillermo Austin Kim | 2019년 2월 10일 |
인터럽트 후반부 기법을 적용하는 이유 인터러트 후반부 기법을 쓰는 이유에 대해 알아보기 전에 커널이 인터럽트를 어떤 방식으로 처리하는지 살펴볼 필요가 있습니다. 5장에서 배운 내용을 정리해보겠습니다. 1. 인터럽트가 발생하면 커널은 실행 중인 프로세스를 멈추고 인터럽트 벡터를 실행해서 인터럽트 핸들러를 실행합니다. 2. 인터럽트 핸들러는 짧고 빨리 실행해야 합니다. 3. 인터럽트를 처리하는 구간이 인터럽트 컨택스트인데 이를 in_interrupt() 함수가 알려줍니다. 인터럽트 후반부 기법을 적용해야 하는 이유는 인터럽트 컨택스트에서 빨리 실행을 끝내야 하기 때문입니다. 인터럽트는 실행 중인 코드를 멈추고 인터럽트를 핸들링하기 때문입니다. 자연스럽게 임베디드 리눅스 개발자뿐만 아니라 임베디드
[bash: awk] 작업 시작전, 완료후에 실행할 명령어 지정(BEGIN/END)
By 반달가면 | 2016년 11월 18일 |
awk에서 텍스트 파일에 대한 작업을 시작하기 전, 또는 모든 작업이 끝난 후에 실행할 명령어를 지정해 줄 수 있다. 시작전을 나타내는 구문은 BEGIN, 끝난 후는 END로 지정한다. 아래의 예시를 보자. awk 'BEGIN { print "작업을 시작합니다." } ... END { print "작업을 완료했습니다." }' my_file.txt 굳이 이러한 구문이 필요할까 싶을 수도 있겠지만 의외로 요긴하다. 특정 디렉토리에서 특정 파일의 용량 합계를 awk를 이용해서 계산하는 방법을 다룬 이전 게시물을 보면 END 구문이 마지막 결과 출력에 활용되고 있음을 볼 수 있다. awk 활용에 대한 다른 게시물들은 여기로
[bash: while, date] 특정 기간 동안의 연속된 날짜 출력하기
By 반달가면 | 2017년 1월 24일 |
예를 들어 2016년 10월 1일부터 2017년 2월 5일까지의 날짜를 연속으로 출력하는 방법이다. 시작 날짜와 종료 날짜의 형태를 년(4자리)월(2자리)일(2자리) 이렇게 정하면(예: 2016년 10월 1일 -> 20161001) 조건문에서 일반 수자처럼 대소 비교를 할 수 있으므로 while 반복문과 date를 조합하여 스크립트를 만들 수 있다. 아래의 예시를 보자. # 시작 날짜 2016년 10월 1일 start_date="20161001" # 종료 날짜 2017년 2월 5일 end_date="20170205" # cur_date 변수 초기값 설정(시작 날짜) cur_date="$start_date" # 종료 날짜까지 반복 while [[ $cur_date -le $end