본문 바로가기

Linux

(13)
리눅스 쉘 프로그래밍 -1- 쉘 스크립트 구조 #! /bin/bash # -> bash로 정의 할 시 bash에 의해 처리되고 해석된다. #! /bin/peri # -> peri로 정의 할 시 peri에 의해 처리되고 해석된다. 함수명 () { 명령 ... } 변수 1= 값 변수 2= 값 # 주석(Comment) 쉘 문법(조건, 선택, 반복) 명령 ... 함수 호출 주석 사용법 -> C랑 비슷해보인다. -> 헤더 넣고~~ 주석 넣고~~~ 쉘 스크립트를 잘 만들 수 있는 방법 -> 시스템관리 관련 명령을 잘 알아야 함. -> 작업을 위해 사용될 명령들과 명령 순서를 알아야 함. -> 쉘 스크립트 작성 전 사용할 명령들, 실행 순서, 실행 조건들을 정리한다.
Raspberry PI에 Vim 테마 설치 vim 다운을 받자 sudo apt-get update sudo apt-get install vim Plug.vim을 설치한다. curl -fLo ~/.vim/autoload/plug.vim --create-dirs \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim 경로에 ~/.vim/autoload/plug.vim이 다운 되었는지 확인한다. 확인되었으면 vimrc를 vim으로 연다. sudo ~/.vimrc vimrc에 다음과 같이 쓴다. " Plugins will be downloaded under the specified directory. call plug#begin(has('nvim') ? stdpath('data') ...
Raspberry Pi Compute Module 3 b+ EMMC OS 올리기 Raspberry Pi Compute Module 3 B+ 에 OS를 올려 보자 (참조 링크: https://www.raspberrypi.org/documentation/hardware/computemodule/cm-emmc-flashing.md) Hardware 준비 다음 그림과 같이 세팅한다. 준비 끝 Software 준비 1. Ubuntu를 킨다. 2. git을 설치한다. sudo apt install git 3. usbboot를 설치한다.(Raspberry Pi Usb를 인식하기 위한 Boot Driver) git clone --depth=1 https://github.com/raspberrypi/usbboot 4. 들어간 후 다음과 같이 실행한다. cd usbboot sudo apt instal..
리눅스 및 커널 프로그래밍 스터디 정리 #5 CFS 기본개념 - n개의 Process에게 각각 1/n의 Process time 제공 - 특정 시간안에 n개의 프로세스가 모두 동일한 시간동안 실행 앞선 문제의 대안 - 순차적으로 일정시간 수행하고, 가장 실행이 덜 된 프로세스를 다음 대상으로 스케줄 - nice는 time slice 대신 processor time 비율의 가중치 계산에 사용 - time slice: (자신의 가중치/가중치 총합)으로 계산 targeted latency CFS가 설정한 가장 작은 스케줄 단위 또는 response time의 최대치 (wait 후 얼마나 기달?) ex) target latency가 20ms 이면 - 2개의 작업이 있으면 : 각각 10ms 씩 수행 - 20개의 작업이 있으면 : 각각 1ms 씩 수행 mini..
리눅스 및 커널 프로그래밍 스터디 정리 #4 Multi - Tasking - 하나 이상의 프로세스를 동시에 중첩형태로 실행 Cooperative Multi tasking - Yield를 통해서만 CPU를 양보 - 양보를 모르는 독점적 프로세스 - Mac OS 9 or less, Windows 3.1 - 잘못된 프로그램이 계속돌면 뺏어 올 수가 없음 Preemptive Multi tasking - Linux와 UNIX 에서 사용 - 스케줄러가 프로레스의 실행중단과 다른 프로세스 선택을 결정 - preemption: 실행중인 프로세스를 강제 중지시키는 것 - time slice: Preempt되기 전까지 프로세스에게 주어지는 시간 POLICY * I/O oriented Process - GUI를 가진 대부분의 프로그램 * Processor orient..
리눅스 및 커널 프로그래밍 스터디 정리 #3 리눅스의 스레드 구현 리눅스의 스레드: 주소공간과 같은 자원을 프로세스와 공유 Kthread: 커널 스레드를 만드는 프로세스 -> 새로운 커널 스레드를 생성 -> Kthread_create(int ...) -> 생성되었지만 BLOCK 상태 ※ Kernel thread는 우선순위가 항상 높다(User thread 보다) 프로세스 종료 exit()를 집어넣지 않아도 컴파일러가 집어넣어준다. 자발적: exit() 비자발적: Signal, Exception Process descriptor 제거 종료된 프로세스의 descriptor는 여전히 존재(task_struct) -> 자식 프로세스의 정보를 제공하기 위해 존재하며 부모가 가지고 오면 Delete 커널이 더 이상 필요 없다고 판단 되면제거 ※ 좀비프로세스 ..
리눅스 및 커널 프로그래밍 스터디 정리 #2 Process Creation fork(): 현재 Task를 복제해 자식 Task를 생성한다. exec(): 새로운 실행파일을 주소공간에 불러온다. (어느 정도 Page Table이 갱신된다.) Copy on Write (CoW) Task를 Fork 하면 자원은 모두 독립되어 사용되어야한다. 하지만 Resource는 한정되어 있으므로 무작정 독립 시키지않고 처음엔 같은 자원을 공유한다. 이렇게 쓰다가 Child 에서 Resource A를 쓴다고 하면 그떄 Resource A를 복사해서 사용한다. Parent가 fork() 실행 후 Child Process는 exec() 함수를 실행 하여 새로운 실행파일을 실행하기 전 File Descriptor를 수정하여 (dup(), dup2() 함수) 실행 할 수 있..
리눅스 및 커널 프로그래밍 스터디 정리 #1 테스크 구조체 테스크는 Task_Struct이라는 구조체에서 관리를 한다. Task_Struct은 Page table fd를 포함하고 있다. User Space에서는 System call 함수를 호출하여 Kernel Stack(8KB)에 접근할 수 있으며 kernel Stack의 Current Macro를 통해 Task_struct의 접근하여 우선순위나 fd등에 접근 할 수 있다. Process Context 리눅스에서는 Stack이 3개로 쓰여진다. interrupt Stack: 인터럽트 발생 시 사용하는 Stack 이다. (CPU 에서는 Core 갯수만큼만 있다) Kernel Stack: 시스템 콜 함수를 호출하였을 시 사용하는 Stack이다. (USER Process 만큼만 있다.) USER Sta..