개발 관련 책 읽기(46)
-
Chapter 3 - 태스크 관리(2)
위의 그림은 리눅스에서 프로세스와 스레드를 관리하기 위한 커널 자료 구조를 보여준다 리눅스에서는 프로세스가 생성되는 스레드가 생성되든 task_struct라는 자료구조를 생성한다 결국 리눅스 커널은 프로세스 or 스레드 중에서 어떤 것이 요청될지라도, 모두 task_struct 자료 구조로 동일하게 관리한다 단지 task_struct 자료 구조 중에서 수행 이미지를 공유하는가, 같은 스레드 그룹에 속해 있는가 등의 여부에 따라 프로세스 또는 스레드로 사용자에게 해석되는 차이가 있을 뿐이다. 결국 리눅스는 1대 1 모델 기반으로 한다 이러한 구현은 기존의 운영체제와는 다른 리눅스 특유의 태스크 개념을 유도한다 리눅스에서는 프로세스이던 스레드이던 커널 내부에서는 태스크라는 객체로 관리된다. 태스크가 관리하는..
2022.09.19 -
Chapter 3 - 태스크 관리(1)
태스크란 무엇일까? 프로세스나 쓰레드의 차이점은 무엇일까? 일반적인 운영체제 서적에서는 태스크를 자원소유권의 단위로 쓰레드를 수행의 단위로 정의한다 프로세스를 동작중인 프로그램 프로그램은 디스크에 저장되어 있는 실행 가능한 파일 형태이다 실행 파일 자체는 그저 디스크에 저장되어 있는 수동적인 존재에 불과하다 파일 형태로 존재하고 있는 프로그램이 수행되기 위해서는 리눅스 커널로부터 CPU등의 자원을 할당받을 수 있는 동적인 객체가 되어야 한다 . 이 동적인 객체가 프로세스이다. 결국 프로세스는 동작중인 프로그램이며, 커널로부터 할당받은 자신만의 자원을 가지고,CPU가 기계어 명령들을 실행함에 따라 끊임없이 변화하는 동적인 존재이다 32bit CPU경우 운영체제는 각 프로세스에게 총 4GB크기의 가상공간을 ..
2022.09.19 -
Chapter 0 - 운영체제란
이 시리즈는 리눅스 커널 내부구조(http://www.yes24.com/Product/Goods/16040426)를 공부하고 정리한 내용입니다. 자세히 알고 싶은 분들은 책을 통해 확인 부탁드려요 ~ 😁😁 자 시작해볼까요? 운영체제는 일반적으로 자원 관리자(Resource Manager)라고 정의된다 운영체제는 CPU,메모리,디스크 등의 자원을 관리하여 일반 사용자가 컴퓨터를 사용할 수 있도록 한다 운영체제는 비휘발성 저장 매체인 디스크에 프로그램을 저장한다. 일반적으로 저장되는 내용은 파일(File)이라는 객체로 관리된다. 리눅스는 우선 디스크의 일부 공간을 할당받게 되고(일반적으로 4KB크기,이것을 디스크 블록이라 한다) 여기에 파일의 내용을 저장하게 된다. 또한 파일의 속성 정보(만들어진 시간,만든..
2022.09.19 -
4. NL 조인[조인 튜닝]
조인 튜닝에 들어가기 앞서, 내가 생각했을때 튜닝의 꽃은 조인튜닝이라고 생각한다. 인덱스 튜닝도 중요하고 다른것들도 중요한데 왜 조인튜닝이 중요하다고 생각했냐면.. 실제 업무에서 쿼리짤때 조인이 안들어가는 경우가 드물다.(조인없는 쿼리가 과연 있을까?? ㅋㅋ) 그래서 조인튜닝은 잘배우면 실무에서 바로 써먹을수 있는 좋은 기회 라고 생각한다. 😲😲 그러면 조인 튜닝에 대해서 들어가보자~ 오라클의 대표적인 조인 알고리즘에는 3가지가 있다. (NL조인, Sort_Merge조인, Hash조인 ) 그중에서 먼저 NL조인에 대하여 알아보자. NL조인의 작동방식은 말그대로 NESTED LOOPS 중첩 루프 방식이다. C, JAVA등 언어에서 다중 반복문이라고 생각하면 쉽다! [NL 조인 작동방식] C,JAVA PL/..
2022.09.19 -
3. 부분 범위 처리[인덱스 튜닝]
부분 범위 처리란 dbms가 클라이언트에게 데이터를 전송할 때 일정량씩 나누어 전송한다. 전체 결과 집합 중 아직 전송하지 않은 데이터가 많이 남아있어도 서버 프로세스는 클라이언트로부터 추가 Fetch Call을 받기 전까지 그대로 기다린다. OLTP(Online Transcation Processing) 환경에서 대용량 데이터를 빠르게 핸들링할 수 있는 아주 중요한 원리이다. DBMS가 데이터를 모두 읽어 한 번에 전송하지 않고 먼저 읽는 데이터부터 일정량(ArraySize)을 전송하고 멈추기 때문이다. 1. 일정량 데이터(ArraySize)를 전송 후 서버 프로세스는 CPU를 OS에 반환하고 대기 큐에서 Wait를 한다. 2. 다음 Fetch Call을 받으면 대기 큐에서 나와 그다음 데이터부터 일정..
2022.09.19 -
2. 인덱스 클러스터링 팩터[인덱스 튜닝]
클러스터링 팩터(CF)란 '특정 컬럼을 기준으로 같은 값을 갖는 데이터가 서로 모여있는 정도를 의미한다' CF가 좋을수록 검색 효율이 매우 좋다. 그 이유는, CF가 좋을수록 데이터가 물리적으로 근접해 있다는 의미로 같은 블록 안에서 데이터를 접근할 수 있다는 의미가 된다. => 즉, 블록 I/O 비용이 적게 발생한다는 의미이다. 좀 더 깊게 들어가 본다면 인덱스를 통한 수직적 + 수평적 탐색으로 접근한 Leaf 블록에서 얻은 ROWID로 데이터 블록을 접근하는데 오라클은 래치 획득과 해시 체인 스캔 과정을 거쳐 어렵게 찾아간 테이블 블록에 대한 포인터(메모리 주솟값)을 바로 해제하지 않고 일단 유지한다 - > '버퍼 Pinning'이라고 한다. 이 상태에서 다음 인덱스 레코드의 ROWID를 읽었을 때 ..
2022.09.19