분류 전체보기
-
커널 동기화Linux/Linux Kernel 2020. 8. 16. 17:03
스핀락 스핀락 특징 preempt_enable() 함수와 preempt_disable() 함수가 존재해 스핀락 획득시 선점을 할 수 없다. CPU 아키텍처별로 스핀락의 구현부가 다르다. 임계영역에서 인터럽트를 허용한다면 spin_lock() 함수와 spin_unlock() 함수를 사용한다. 임계영역에서 인터럽트를 허용하고 싶지 않다면 spin_lock_irq() 함수와 spin_unlock_irq() 함수를 사용한다. 임계영역에서 인터럽트 상태를 확인하기 하고 싶다면 spin_lock_irqsave() 함수와 spin_unlock_restore() 함수를 사용한다. spin_lock_irq() 함수와 spin_unlock_irq() 함수를 사용하는 경우(임계영역에서 인터럽트를 허용하고 싶지 않을 경우) ..
-
커널 타이머 관리Linux/Linux Kernel 2020. 8. 16. 17:02
동적 타이머 동적 타이머 실행 흐름 1. 동적 타이머 초기화 timer_setup() 2. 동적 타이머 등록 add_timer() mod_timer() 동적 타이머를 per_cpu 타입인 timer_bases 전역변수에 등록한다. 3. 동적 타이머 실행 run_timer_softirq() __run_timers() __collect_expired_timers() call_timer_fn() Soft IRQ 타이머 서비스에서 동적 타이머를 실행한다. 1) arch_timer_handler_phy() 타이머 인터럽트가 발생하면 타이머 인터럽트 핸들러인 arch_timer_handler_phy() 함수가 실행된다. 타이머 인터럽트는 1초에 HZ만큼 발생한다. 2) run_local_timers() 현재 CPU..
-
가상 파일 시스템Linux/Linux Kernel 2020. 8. 16. 17:01
가상 파일 시스템이란? 가상 파일 시스템은 파일 시스템 인터페이스를 사용자 어플리케이션에 제공하준다. 즉, 가상 파일 시스템만 있으면 어떤 파일 시스템으로 관리하는 파일이라도 읽고 쓸 수가 있다는 것이다. 가상 파일 시스템이 왜 필요할까? 바로 파일 시스템 종류가 많기 때문이다. 파일 시스템마다 자신만의 읽고 쓰는 함수가 존재한다면 사용자 어플리케이션에서는 사용하기 힘들다. 예를 들어 FAT-32 파일 시스템을 사용하는 SD카드(/mnt/sd)에 있는 source라는 파일을 리눅스의 EXT3 파일 시스템을 사용하는 /tmp 디렉터리에 target 이름으로 복사하려면 어떻게 해야할까? 벌써부터 머리가 아프다. 비록 FAT32와 EXT3의 파일 시스템 형식은 서로 다르지만 동일한 open() 함수를 이용하여..
-
페이징(paging) 세그먼테이션(segmentation)Operating System 2020. 4. 29. 13:39
메모리 관리 기법 페이징 기법 페이징은 물리 메모리를 페이지라고 불리는 일정한 크기로 나누고, 선형 주소를 통해서 페이지 단위로 물리 주소로 접근하는 기법이다. 다시 말한다. 접근하는 방식이다. 즉, 메모리 접근 기법이라고 보는것이 더 정확해 보인다. 페이징이라는 기법을 통해서 물리 메모리에 접근해야 적재를 하던 스왑을 하던 읽던지 할 수 있기 때문에 페이지 단위로 물리 메모리에 접근하는 것까지가 페이징 기법이라고 하는 것이 더 정확할 것이다. 가상 메모리와 페이징 일단 가상메모리는 무엇인가? 보조기억장치를 주기억장치처럼 느끼게 해주는 것이다. 예를들어 설명하겠다. test1.c #include int main() { int a = 0; while(true) { printf("%d",&a); } retu..
-
Static Link(정적 링크) Dynamic Link(동적 링크)Operating System 2020. 4. 28. 15:52
소스코드를 컴파일하면 목적 파일이 생성된다. 그런데 이 목적 파일을 실행파일로 만들기 위해서는 링크 단계를 거치게 되는데 이때 라이브러리 함수를 사용했다면 이 라이브러리 파일이 정적 라이브러리 파일인지 동적 라이브러리 파일인지에 따라서 프로그램 동작이 다르다.(라이브러리 파일을 만들 때 정적 라이브러리 파일로 만들면 정적 링크를 해야 되고 동적 라이브러리 파일로 만들면 동적 링크를 해야 한다.) johnjarrer.tistory.com/139 Static Library(정적 라이브러리) Dynamic Library(동적 라이브러리) 리눅스는 다음과 같은 확장자를 가진다. *.a 정적 라이브러리 파일 *.so 동적 라이브러리 파일 (so: shared object) 윈도우는 다음과 같은 확장자를 가진다. ..
-
11. 타이머와 시간 관리Operating System 2019. 12. 30. 16:24
커널에 있어 시간의 흐름은 중요하다. 대다수의 커널 함수가 이벤트 기반이 아닌 시간 기반으로 동작하기 때문이다. 시간 기반으로 동작하는 함수로 스케줄러 실행 큐의 균형을 조절하는 함수나 화면을 갱신하는 함수 등을 예로 들 수 있다. 이런 함수는 초당 100회와 같이 정해진 주기에 따라 실행된다. 지연된 디스크 입출력을 처리하는 함수처럼 커널이 특정 함수를 상대적인 미래 시점에 실행해야 하는 경우도 있다. 예를 들면, 특정 작업을 지금으로부터 500ms 후에 실행해야 하는 경우가 있을 수 있다. 그리고 커널은 시스템의 가동 시간과 현재 날짜 및 시간도 관리해야 한다. 상대 시간과 절대 시간의 차이점을 주의하자. 앞으로 5초 후의 작업을 스케줄링하는데는 절대 시간 개념이 필요하지 않으며 상대시간 개념만 있으..