본문 바로가기

728x90

ComputerScience/Linux

(9)
Linux 11. Synchronization (2) 1. Spinlock spinlock은 linux에서 가장 많이 사용하는 lock중 하나이다. thread는 lock을 aquire하기 위해 loop안에서 계속 spin하면서 기다린다. lock이 available한지 계속해서 검사한다. spinlock은 context switching없이 busy watiting 하는 동안 계속해서 cpu cycle을 낭비한다. 그래서 보통은 short time내에 lock을 얻을 수 있는 task에 많이 쓴다. io 같이 hdd에서 읽기, 쓰기 작업이 많은 경우는 busy waiting이 상대적으로 길다. 이렇게 긴 시간을 기다려야 하는 경우는 보통 spinlock 대신 mutex등을 사용한다. 반면 자료구조에 삽입 삭제하는 경우는 상대적으로 busy waiting하..
Linux 10. Synchronization 1. Synchronization 여러 쓰레드가 shared resource에 동시에 접근하려는 상황에 한 순간에 한명만 점유할 수 있도록 보장해야 한다. critial section은 한번에 한명만 실행하고 있음을 보장하는 code segment이다. 대게 critical section은 shared variable에 접근하는 부분이다. critical section이 보호되지 않는 상태에서 여러 쓰레드가 자원에 접근하는 상황에 결과를 장담할 수 없다 이를 race condition이라고 한다. critical section을 보호하기 위해 entry에 lock을 잡고 들어가서 exit에서 Lock을 해제한다. i의 값을 증가시는 함수를 호출하는 두 thread가 있다고 하자. 운이 좋으면 예상하는대로..
Linux 9. Thread 1. Thread thread는 cpu 자원을 utilize하는 가장 기본 단위이다. 각 thread는 각 core에 할당된다. Process안에서 execution의 단위가 된다.그래서 lightweight process라고도 불린다. program counter, stack, tread ID를 포함한다. 프로세스는 여러개의 쓰레드를 가질 수 있다. 따라서 쓰레드들을 여러 작업에 잘 분배함으로써 병렬 효과를 볼 수 있다. 예를들어 크롬 브라우저에 여러 탭을 띄워 놓는 것이 있다. 쓰레드 들은 같은 프로그램 내에서 same data, same address space를 share하며 concurrent하게 실행된다. Right diagram shows that in a single thread, thre..
Linux8. Process 1. program and process program은 instruction, data, metadata등으로 구성된 disk에 저장되어 있는 파일이다. program이 execute되면 memory에 이 코드들이 올라간다. memory에 올라와 있는, 실행 중인 running program을 process라고 한다. 예를들어 pwd라는 명령어를 치면 저장된 pwd program이 실행되고 pwd를 실행하는 process가 생성된다. linux는 process마다 PID를 부여해서 관리한다. 2. fork() user-level code에서도 fork() system call을 활용하면 우리도 process를 생성할 수 있다. fork()를 호출하면 현재 parent process의 state를 그대로..
Linux6. Makefile 1. Make make는 컴파일을 도와주는 도구이다. 예를 들어 이런 소스 코드가 있다고 하자. 이 코드를 실행하려면 다음과 같은 과정을 거쳐야 한다. 만약 후에 코드에 수정이 생기면 이 과정을 처음부터 다시 해야한다. 코드가 많아질수록 힘들다. makefile을 만들어 놓으면 이 과정을 쉽게 할 수 있다. 매크로를 사용해서 makefile을 다시 작성했다. 더 간단히 하면 이와 같다. 만약 실행파일을 여러개 만들고 싶으면 all : 뒤에 추가하면 된다.
Linux4. Design Principle of Linux Kernel 1. Monolithic vs Micro 커널은 크게 커널 내에 넣는 feature의 양에 따라 Monolithic 커널과 Micro 커널로 나눌 수 있다. 마이크로 커널은 커널의 핵심적인 부분(스케쥴링, 메모리 관리)만 커널에 담고 있다. 대부분의 커널 기능들이 user mode에 있다. 당연히 확장성과 모듈화가 좋다. 커널과 통신할때는 system call을 통해서, 모듈끼리는 Inter Process communication(IPC)로 서로 통신해야 한다. 좌측의 빨간 화살표는 function call, 우측의 화살표는 IPC이다. 반면 Monolithic Kernel은 커널 모듈끼리 function call로 통신하므로 훨씬 빠르다. IPC는 프로세스간 통신으로 message queue, shar..
Linux3. System Call 1. User mode, Kernel mode 커널은 운영체제의 중요한 부분을 일컫는 말이다. CPU, 메모리 혹은 쓰레드 패킷 등의 자원들에 직접 접근할 수 있는 부분을 말한다. CPU 스케쥴링, 메모리 관리, 입출력 관리, 파일시스템 관리 등의 업무를 맡는다. 따라서 이렇게 중요한 부분을 사용자가 접근하여 자원에 침범하는 일을 막기 위해 운영체제에서는 OS를 두가지 모드로 나누어 놓는다. - 유저 모드 사용자가 접근할 수 있는 영역으로 user application code가 이곳에서 실행된다. - 커널 모드 모든 드라이버, 메모리, cpu에 직접 접근하여 명령을 내릴 수 있다. 2. System call 프로세스는 user mode와 kernel mode를 왔다갔다 하면서 실행된다. 예를 들어 fo..
Linux2. linux commands and tools chmod 755 test.sh nohup python3 app.py scp user@ip:remote_dir user2@ip2:remote_dir scp user@ip:remote_dir local_path df -h df -lh curl -X localhost:5000/{data} ps history | grep "echo" ls | grep "vi" > output.txt echo "hi" > test.txt echo "hello" >> test.txt cat cut_file | cut -d : -f 1,7 cat fruits.txt | sort | uniq | wc -l grep "^a" grepfile grep -i "^a" grepfile grep -i "e$" grepfile head -n ..

728x90