LINUX
Posts
487 posts[라즈베리파이] 스케줄링(scheduling)이란 무엇일까?
여러분들은 리눅스 시스템이 탑재된 휴대폰이나 라즈베리파이를 쓰면 동시에 여러 프로그램을 실행할 수 있습니다. 휴대폰을 보면 다양한 프로그램이 동시에 실행하는 것을 확인할 수 있습니다. 예를 들면 브라우저를 실행하면서 음악을 듣거나 메신저를 하면서 어플리케이션을 다운로드 할 수 있습니다. 그래서 사람들은 여러 프로세스들이 동시에 CPU에서 실행한다고 느낄 수 있습니다. 하지만 CPU는 여러 개의 프로세스를 절대로 동시에 실행할 수는 없습니다. 리눅스 커널을 포함한 다양한 운영체제에서 스케줄링과 멀티 태스킹 기법이 생겨난 이유는 다음과 같습니다.CPU는 한 순간에 한 개의 프로세스의 코드만을 실행할 수 있습니다. 여러 개의 프로세스들이 효율적으로 번갈아 CPU에서 실행할 수 있게 규칙을 부여하고 프로세스들을
[라즈베리파이] 프로세스: 태스크디스크립터(프로세스 실행 시각 정보)
태스크 디스크립터에는 프로세스 실행 시각 정보를 알 수 있는 멤버들이 있습니다. 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
[라즈베리파이] 프로세스: 태스트디스크립터(프로세스 연관관계)
이전 시간에 유저 공간에서 생성한 모든 프로세스의 부모 프로세스는 init 이고 커널 공간에서 생성한 커널 스레드(프로세스)의 부모 프로세스는 kthreadd라고 했습니다. 태스크 디스크립터에서는 프로세스의 부모와 자식 관계를 상세히 알 수 있습니다. struct task_struct *real_parent; 프로세스를 생성한 부모 프로세스의 태스크 디스크립터 주소를 저장합니다. struct task_struct *parent; 부모 프로세스를 의미합니다. real_parent 란 멤버는 해당 프로세스를 생성해준 프로세스를 의미합니다. 그런데 자식 프로세스 입장에서 부모 프로세스가 소멸된 경우 부모 프로세스를 다른 프로세스로 지정합니다. 프로세스 계층 구조에서 지정한 부모 프로세스가 없을 경우 in
리눅스에서 파일을 인자(argument)로 사용하는 곳에 표준입출력 사용하기
제목이 약간 복잡한데, 좀 더 자세히 설명해 보자면 이렇다. 인자(argument)로 파일명을 입력 받아서 작업을 하는 프로그램/스크립트가 있는데, 파일 대신에 터미널창의 출력(표준출력)을 파이프(|)로 넘겨서 마치 파일의 내용인 것처럼 입력하고 싶은 경우다. 좀 억지스럽긴 하지만, 편의상 예를 들어 test.sh 스크립트의 내용이 아래와 같다고 해 보자. # test.sh 내용 cat test.sh file "$1" cat "$1" 위 스크립트의 내용을 보면 file 명령어로 파일 종류를 식별하여 출력한 후에 cat 명령어로 해당 파일의 내용을 출력하는 것임을 알 수 있다. # test.sh 실행 예시 bash test.sh my_doc.pdf my_doc.pdf: PDF d

