전체 글 354

[DB] 데이터베이스를 지탱하는 기술 Chapter 2

데이터베이스를 사용하는 이유- 대용량 데이터 처리- 일반적인 자료구조로는 인메모리로만 사용 가능- 디스크를 이용할 수 있어야 한다.- 빠른 탐색이 가능해야 한다.- 인덱스 (BTree 자료구조)- 장애 발생 시 데이터 백업 및 복구- 데이터가 사라지지 않도록 해야 한다.- 데이터의 무결성을 위해 '트랜잭션' 개념 적용- 해당 솔루션을 제공- Redis의 경우 Replication 및 RDB / AOF 옵션- 병렬성 제어가 어려움- Lock 개념이 들어감.- 성능과 상황에 따라 Table Lock / Row Lock 등을 사용할 수 있도록 해당 기능을 제공해 줌- InnoDB의 경우 Isolation Level 옵션 등 NoSQL- 기존 DB에서 충분한 성능이 나오지 않거나, 여러 서버를 구축하기 어려운 ..

DB 2018.11.11

[자료구조] 더블해싱

더블해싱은 Open Address 방식이라고 하며, 체이닝과는 다르게 메모리 공간을 최대한 활용하려는 방향성을 가진다. Open Address 중 기본적인 방식이 그저 테이블 크기(Prime number)로 Mod 연산을 수행한 결과 + 충돌 시 1칸씩 이동한 결과라면 더블 해싱은 위에서 이 '1칸씩 이동하는' 부분을 1이 아닌 X만큼 이동하도록 변경한다. X라는 값은 어떻게 선정해야 할까? 저번 포스팅으로 Key값을 소수로 Mod하는 것에 대한 이점을 알아보았다. '어떤 수 A로 Mod 연산 시, A의 약수들의 배수로 이루어진 input에 대해 A보다 작은 해당 수들의 배수가 output이 된다.' 마찬가지로 이 X도 그런 이유로 결정하면 된다. 하지만 추가적으로, 이 이동량이 0이 나오는 경우를 배제..

Data Structure 2018.10.23

[자료구조] 해시테이블과 소수

테이블 크기를 소수로 하는 이유. 소수가 아닌 수 A라고 가정해 보자. 그렇다면 A의 모든 약수는 자신의 배수가 곧 키값이 된다. 예를 들면, 12로 Mod 연산을 한다고 했을 때, 12의 약수input : 3 6 9 12 15 18 21 24 ...output : 3 6 9 0 3 6 9 0... input : 4 8 12 16 20 24 ...output : 4 8 0 4 8 0 ... input : 6 12 18 24 30 36 ...output : 6 0 6 0 6 0 ... 이런 식이다. 하지만 소수는 약수가 1과 자신 뿐이므로 약수의 배수가 항상 약수로 나오는 문제가 제외된다.

Data Structure 2018.10.23

[Pintos] 1. background

struct thread- thread id- thread status // running, ready, block, dying- thread name- stack pointer // saved stack pointer- priority+ allelem // list element for all threads list.+ elem // list element- pagedir // USER PROGRAM이 define되어 있다면 사용. page directory이다.- magic // detects stack overflow- 생성될 때 THREAD_MAGIC(0xcd6abf4b)으로 설정. 스택 오버플로우 발생 시 이 값이 변한다. description- kernel 스택 메모리가 작아서 스택 오버플로우..

[Tip] Docker Redis 시작하기

설치sudo apt-get install docker.io redis 이미지 다운docker pull redis docker로 실행docker run redis이러면 실행되긴 한다.하지만 더 자세한 설정을 해 줄 필요가 있다.--rm : 실행 정지되면 자동으로 컨테이너를 지워 줌 -d : 백그라운드에서 데몬으로 실행됨-p [외부포트 : 내부포트] : docker 컨테이너의 외부/내부포트 지정 => ex) -p 8080:6379-v [외부 디렉토리 : 내부 디렉토리] : 실제 OS 폴더와 해당 컨테이너 내부의 폴더를 연결시켜 줌. 보통 컨테이너가 종료되면 해당 컨테이너에 저장되었던 데이터들이 모두 날아가는데, 이를 방지하기 위함이다. Dockerfile (공식 문서, 명령어 : 참고 블로그)- 이미지에 설..

2018.10.16

[Network] 흐름 설명

- Socket은 커널 오브젝트이다.- Local / Remote의 IP 주소를 가진다. Server1. socket() system call로 소켓 생성2. bind() system call로 주소 및 포트설정3. listen() system call에 bind로 설정한 소켓과 backlog값 설정.1) listen()을 호출하게 되면 커널에서 SYN backlog, Accept backlog라는 2개의 queue를 생성한다(3 way handshake 준비).- backlog : backlog queue의 크기 설정2) Client로부터 SYN 요청이 들어오면 해당 소켓 정보를 SYN backlog queue에 저장한 후, SYN + ACK를 해당 Client에 보낸다.- Timeout 발생 시 재시..

Network 2018.09.30

[OS] 정리7 : 가상 메모리

exit- 종료 처리 진행 후 프로세스 종료- atexit() 함수 호출하여 exit handler에 등록된 함수 호출- 전역 or 정적 객체 소멸자 호출abort- 프로세스 즉시 종료- atexit() 호출하지 않음- 소멸자 호출되지 않음- 잘못된 기능을 수행하고 있어 더 진행되면 위험할 경우 abort 사용 프로세스가 사용하는 실제 메모리 공간- 일반적으로 0 ~ max의 연속된 메모리. 물리 메모리는 연속적이지 않을 수 있다.- MMU가 Page를 Frame으로 매핑한다. Copy On Write- 부모 프로세스와 자식 프로세스가 같은 페이지를 공유하는 것이다.- 두 프로세스 중 하나가 공유 페이지를 수정하게 되면, 복사된 페이지를 쓰게 한다.- 이 때 어떤 free page를 할당할지 결정하는 게..

OS 2018.09.27

[OS] 정리6 : 메모리 관리

프로그램이 실행되려면 메모리로 가져와야 한다. Input queue(job queue) : 프로그램을 실행하기 위해 메모리로 가져오는 것을 기다리는 프로세스 집합 - Long-term 스케줄러의 역할. 유저 프로그램은 실행되기 전에 다음 과정을 거친다. 자세한 내용은 나중에 적어두어야겠다.- Instruction Fetch : 명령어를 메모리로부터 가져온다. 메모리 -> CPU Cache- Instruction Decode : 가져온 명령어에서 PC가 가리키는 주소값을 읽고 다음 명령어가 있는 곳으로 PC값(가상 메모리 주소)을 갱신한다.- Operand Fetch : 명령어에서 사용되는 피연산자를 읽는다.- Instruction 실행 : 명령어를 실행한다.- 명령 실행 결과를 메모리에 저장 메모리 접근..

OS 2018.09.26

[OS] System call, Interrupt, Trap, 등

Interrupt- 하드웨어(I/O 포트, 그래픽 카드, 하드 디스크, 등)에서 발생. 처리가 필요할 경우에 CPU에게 그 상황을 처리할 수 있도록 알려주는 것- 인터럽트가 발생하면 실행 중인 코드를 중단하고, 인터럽트 서비스 루틴을 실행하여 인터럽트를 처리함.- 인터럽트가 발생하면 해당 프로세스는 ready queue에 들어가고 다시 스케줄링됨.- I/O 혹은 Event가 발생하면 해당 작업이 완료될 때까지 wait queue에 들어가게 된다(block 상태). 완료되면 다시 ready_queue로 들어감. System Call- 커널 기능을 커널에 요청하는 방식. Trap을 통해서 실제로 커널에 정보가 전달된다. System Call은 그 Interface라고 할 수 있음. Exception- Tra..

OS 2018.09.24
반응형