[PostgreSQL] Heap, Block, Tuple
·
프로그래밍/DB
📌 Heap/Heap File Heap 혹은 Heap File은 테이블 하나의 모든 정보를 저장하는 파일이다. 여러개의 block으로 구성되어 있다. 시스템 내부에 바이너리 파일 형태로 저장되어 있는데, 아래 쿼리문을 실행하면 SHOW data_directory; 데이터가 저장되는 디렉터리 경로를 알 수 있다. 그리고 해당 디렉터리에 들어가 보면, 여러 파일들이 있는데, 그 중 우리가 봐야 할 것은 base 폴더다. 들어가 보면.. 다음 과 같이 이상한 숫자들만 나온다. 또 아래 쿼리를 실행해서 이 숫자들이 뭔지 알아보자 SELECT oid, datname FROM pg_database; 이 폴더들은 데이터 베이스 별로 나눠둔 것이였다. 그럼 하나를 무작위로 들어가 보자. 😲 헉! 이번에도 이상한 숫자들..
[pgAdmin] Utility file not found. Please correct the Binary Path in the Preferences dialog 오류
·
프로그래밍/기타
❗ Utility file not found. Please correct the Binary Path in the Preferences dialog pgAdmin에서 [DB오른쪽클릭] -> Restore... 기능을 사용하려던 중, 다음과 같은 오류가 떴다. 유틸리티 프로그램을 못 찾고 있다고 한다. bin 디렉터리를 못 찾아서 생긴 오류다. 🛠 해결 방법 postgreSql이 설치된 곳을 찾고 bin 폴더 경로를 복사한 뒤, File -> Preferences -> Paths -> Binary paths 에서 버전 찾아서 넣어주면 끝! 끝! 아래와 같이 잘 나온다!
계획 수정과 2권 시작!
·
디버깅을 통해 배우는 리눅스 커널의 구조
이번주는 워크 큐를 마치고자 했지만 코드가 너무 복잡하고 너무 어려웠다. 그래서 계획도 지키지 못했다. 사실 저번주도 어거지로 계획을 채웠다. 이대로 가다간 배우는 것도 없고 흥미만 잃게 될 것 같아 워크큐는 좀 다음으로 미뤄야겠다. (나중에 워크큐를 다 배우고 나면 이미 올린 포스트에 수정해서 올릴예정) 또 원래는 스터디 계획표 작성을 워크스프레드 시트로 했지만 앞으로는 블로그에 정리해서 올려야 겠다. 워크큐를 건너뛰게 되면 바로 2권으로 넘어간다. 귀요미 펭귄이 한마리 더 생겼다. 2권도 잘 읽자!
워크큐 (Workqueue)
·
디버깅을 통해 배우는 리눅스 커널의 구조
워크큐란? 워크큐는 인터럽트 후반부를 처리하는 기법으로 쓰인다. 다른 인러텁트 후반부 처리 기법이랑 다른점이라면 워크큐는 프로세스 레벨에서 인터럽트 후반부를 처리한다. 워크큐에는 워크, 워크스레드, 워커 풀, 풀워크큐로 이루어져있다. 워크란? 워크는 워크큐의 실행단위다. 자료구조는 아래와 같다. struct work_struct { atomic_long_t data; struct list_head entry; work_func_t func; #ifdef CONFIG_LOCKDEP struct lockdep_map lockdep_map; #endif }; data : 워크 실행상태를 나타낸다 entry : 워크 연결리스트 노드 변수 (list_head는 다음을 참고) func : 실행할 함수 아래 두 매크..
스터디 계획(4주차)
·
디버깅을 통해 배우는 리눅스 커널의 구조
부터 까지
리눅스 커널 스터디 결산 (3주차)
·
디버깅을 통해 배우는 리눅스 커널의 구조
Soft IRQ Soft IRQ는 인터럽트 후반부 기법으로 쓰이는 방법중 하나다. Threaded IRQ는 스레드를 하나 만들고 스케줄링되서 처리하는 개념이지만, Soft IRQ는 인터럽트가 끝나고 나서 바로 처리된다. 1. 서비스 등 2jun0.tistory.com ksoftirqd 스레드 soft IRQ는 인터럽트가 실행되고 난 뒤, 바로 __do_softirq에서 실행된다. 그런데 soft IRQ 서비스가 오래 실행되거나, soft IRQ 컨텍스트에서 soft IRQ 서비스를 요청해서 자원을 계속해서 잡아먹고 있다면 2jun0.tistory.com 태스크릿 Tasklet 당장 Soft IRQ 서비스를 사용하고 싶다면 커널을 수정해서 Soft IRQ 서비스를 추가해야 할까? 아니다. 태스크릿을 이용하..
태스크릿 Tasklet
·
디버깅을 통해 배우는 리눅스 커널의 구조
당장 Soft IRQ 서비스를 사용하고 싶다면 커널을 수정해서 Soft IRQ 서비스를 추가해야 할까? 아니다. 태스크릿을 이용하면 된다. 태스크릿이란? 태스크릿은 Soft IRQ 서비스 중 하나이다. const char * const softirq_to_name[NR_SOFTIRQS] = { "HI", "TIMER", "NET_TX", "NET_RX", "BLOCK", "IRQ_POLL", "TASKLET", "SCHED", "HRTIMER", "RCU" }; 위의 코드에서 "TASKLET"가 있다. HI, TIMER 와 같은 Soft IRQ 서비스이다. 태스크릿은 어떻게 실행될까? 태스크릿은 기본적으로 Soft IRQ 서비스이기 때문에 __do_softirq에서 서비스 핸들러가 호출되어 돌아간다. 태..
ksoftirqd 스레드
·
디버깅을 통해 배우는 리눅스 커널의 구조
soft IRQ는 인터럽트가 실행되고 난 뒤, 바로 __do_softirq에서 실행된다. 그런데 soft IRQ 서비스가 오래 실행되거나, soft IRQ 컨텍스트에서 soft IRQ 서비스를 요청해서 자원을 계속해서 잡아먹고 있다면 어떡할까? 그럴때 필요한게 ksoftirqd 스레드다. ksoftirqd 스레드 란? ksoftirqd 스레드는 커널 스레드로 Soft IRQ를 스레드 레벨에서 처리해준다. static struct smp_hotplug_thread softirq_threads = { .store= &ksoftirqd, .thread_should_run= ksoftirqd_should_run, .thread_fn= run_ksoftirqd, .thread_comm= "ksoftirqd/%u"..
2jun0
'분류 전체보기' 카테고리의 글 목록 (12 Page)