CS

CS/기초데이터베이스

[데이터베이스] 18. 파일과 인덱스 (레코드 저장 방법)

파일DBMS가 데이터를 다룰 때는 '파일(file)' 로 추상화하여 다룬다.파일은 레코드들의 집합이며, 하나 이상의 페이지로 구성되어 있다.그림으로 보면 이해가 쉽다.  DBMS가 다루는 파일은 여러 개의 레코드로 이루어져있다.(이 레코드는 테이블에 저장되는 하나의 데이터 레코드와 비슷한 의미로 이해했다.) 이때 파일은 여러 레코드를 가지는 페이지로 나누어진다.메모리에 적재되어 실행중인 DBMS 프로그램이, 디스크에 저장된 레코드를 메모리로 읽어오거나, 처리한 레코드를 디스크에 쓸 때는 항상 페이지 단위로 주고 받는다.데이터베이스에서 읽어오는 페이지는 1KB ~ 8KB 까지 다양한 크기가 존재할 수 있는데, 페이지의 크기는 보통 4KB 또는 8KB 이다. 레코드에는 그 레코드를 식별할 수 있는 레코드 I..

CS/기초데이터베이스

[데이터베이스] 17. 하드 디스크와 SSD의 구조

하드 디스크의 구조 하드 디스크는 여러개의 원판이 겹겹이 쌓인 구조를 하고 있다.각 원판 중앙에는 spindle rod 라는 중심축이 있고, 각 원반은 중심축을 기준으로 회전한다.이 원반을 platter 라고 부르고, 플래터에 들어있는 0과 1로 이루어진 데이터를 r/w arm 이 읽어들인다.이때 데이터를 읽기 위해서는 각 arm이 물리적으로 이동을 해야 하는데, 디스크 플레이트는 여러개의 트랙으로 구분되고, 그림에서 보는 것처럼 원반을 부채꼴 모양으로 자른 섹터로 나눌 수도 있다. 데이터를 읽고 쓸 때는 하나의 플레이트에서 색터와 트랙이 만드는 영역에 저장되는 '블록' 단위로 데이터를 읽고 쓴다.따라서 데이터를 찾는 데 걸리는 시간은 트랙을 이동하는 시간과 회전하여 섹터를 찾는 시간의 합으로 나타낼 수..

CS/운영체제

[운영체제] 14. 스레드 스케줄링

그림과 같이 스레드가 구현되어 있다고 해보자.(이 구현은 user level 스레드를 보여주고 있다. 런타임 시스템과 그 내부에 스레드 테이블이 있기 때문이다.) 이때 각각의 프로세스에게는 50ms 의 퀀텀이 주어졌고, 각 스레드는 CPU burst 마다 5ms의 시간이 소모된다고 해보자. 그러면 커널이 먼저 실행할 프로세스를 고르고, 그 다음에 런타임 시스템이 실행할 스레드를 골라서 굴리므로 프로세스 A의 스레드들이 A1 A2 A3 A1 A2 A3 이런식으로 돌아간다.유저 레벨 스레드는 스레드 스위칭이 빠르므로, thread_yield 와 같은 프로시저를 사용하여 빠르게 스레드를 교체하며 돌리는 것이 가능하고, 성능도 좋다. (다만 라운드 로빈과 같이 정해진 퀀텀을 정해두고 돌리는 것은 힘들다.) 이때..

CS/운영체제

[운영체제] 13. 스레드의 구현 방법

스레드를 구현하는 방법은 User space 에서 구현하거나, Kernel space 에서 구현하거나, 두 방법을 섞는 하이브리드 방법 크게 3가지가 있다. 각각의 구현 방법에 대해서 정리해본다. User Space 메모리 공간은 크게 User space 와 Kernel space 로 나뉜다.유저 스페이스는 일반적인 유저 프로세스가 실행되는 공간이고, kernel spaces는 운영체제의 핵심 요소인 커널이 존재하며 실행되는 공간이다. User space 에서 스레드를 구현하는 경우 위 그림과 같이 구현할 수 있다.이때 운영체제는 실제로 멀티스레드가 가능한 환경으로 동작하지만, 커널은 스레드의 존재를 모르고, 기존의 프로세스 모델에서 프로세스를 다루는 것과 비슷하게 돌아간다. 따라서 커널에는 proce..

CS/운영체제

[운영체제] 12. 스레드

Process Model지금까지는 프로세스와 프로세스 스케줄링, 프로세스 통신에 대해서 정리하였다.이렇게 프로세스를 사용하여 컴퓨터 프로그램의 동작을 기술하는 것을 Process Model 이라고 하며,이번 글부터는 Thread Model 을 통해서 프로그램의 동작을 기술해보고자 한다. Process Model 은 크게 2가지 개념을 갖는다.1. Resource Grouping2. Thread 리소스 그룹핑은 다음과 같은 데이터를 프로세스 단위로 갖는 것을 말한다.- Address Space   (메모리에 프로세스가 차지하는 공간, 유닉스의 경우 Text(Code) 세그먼트, Data 세그먼트, Stack 세그먼트로 구분)- open file (현재 이 프로세스가 open 한 file에 대한 정보)- c..

CS/운영체제

[운영체제] 11. 스케줄링 (5) - Policy vs. Mechanism

예를 들어 어떤 DBMS 가 실행되고 있다고 해보자.DBMS는 여러 사용자가 접근 가능한 시스템이므로, 각 사용자를 응대하는 자식 프로세스가 여러 개 존재할 것이다.이때 DBMS가 유동적으로 자신이 원하는 특정 자식 프로세스에게 더 높은 CPU를 할당하고 싶은 상황이 있을 수 있다.하지만 일반적으로는 DBMS의 부모 프로세스도, 클라이언트를 응대하는 자식 프로세스도 모두 운영체제에 의해 관리되므로 DBMS가 이를 컨트롤 할 수 있는 방법은 존재하지 않는다. Policy vs. Mechanism 은 부모 프로세스에게 자식 프로세스에 대한 관리 기능을 제공해보자는 아이디어에서 등장했다.즉, 어떤 스케줄링 알고리즘 (Mechanism) 을 사용할 지는 운영체제가 결정하되, 그 알고리즘을 활용하는 정책(Poli..

CS/운영체제

[운영체제] 10. 스케줄링 (4) - Real-Time System 스케줄링

Real-Time System 은 외부의 이벤트에 대해 정해진 시간 안에 적절하게 반응해야 하는 시스템이다.디스크 플레이어를 예로 들면, 디스크에 담긴 디지털 음원 데이터를 바로바로 디코딩해야 끊김없이 노래를 들을 수 있다.자동 조립 로봇, 자동 항법 시스템과 같은 경우도 모두 실시간 시스템의 한 예시이다. 실시간 시스템은 올바른 답을 '정해진 시간 안에' 내놓는 것이 매우 중요하다.정해진 시간 안에 답을 내놓지 못하는 실시간 시스템은 잘못된 답을 내보내는 시스템과 똑같이 나쁜 시스템이다. 실시간 시스템은 크게 2가지로 구분된다. 1. Hard Real Time : 절대적인 데드라인이 반드시 지켜져야 한다.2. Soft Real Time : 때때로 데드라인을 못 지켜도 (바람직하지는 않지만) 괜찮다. 미..

CS/기초데이터베이스

[데이터베이스] 16. 분산 데이터베이스

Constant Hash지금 공부하고 있는 데이터베이스는 하나의 컴퓨터에 모든 데이터를 저장하는 것을 가정하고 있다.하지만 규모가 큰 서비스를 운영하다보면 매우 많은 데이터를 다루므로 하나의 컴퓨터에 저장할 수 없다.따라서 규모가 큰 데이터는 결국 여러 컴퓨터에 쪼개서 저장할 수 밖에 없다.   데이터를 나누어서 저장한다면 우선 그림과 같이 같은 스키마를 갖는 테이블을 여러 개 만들어야 한다.이때 어떤 데이터가 어떤 테이블에 저장될 지 결정하기 위해 각각의 테이블에 0번부터 i 번까지 인덱스를 매긴다.그리고 데이터를 저장할 테이블을 결정할 때는 데이터의 PK를 해싱한 값으로 결정한다.이때 해시 값은 0부터 i 사이의 값이 나올 것이다.해시함수는 단순하게 고려한다면, PK 값이 숫자일 때 이 수를 (i+1..

CS/기초데이터베이스

[데이터베이스] 15. Null, 제약조건, Trigger

Nullnull 은 알지 못하는 값, 존재하지 않는 값을 명시적으로 나타내는 값이다. 만약 어떤 직원이 퇴사하면서 데이터가 삭제되면 그 직원의 피부양자가 모두 삭제되도록 구현하는 테이블이 있다고 해보자.이때 실제로 데이터를 지우는 Hard Delete 방식 외에도, 그냥 피부양자에 대한 내용을 null 로 바꿈으로서 지우는 Soft Delete 방식을 적용할 수도 있다. 다만 Null 값을 사용할 때는 PK 에 null 이 들어갈 수 없다는 것만 기억하자.따라서 테이블을 설계할 때, PK에는 별도의 제약조건을 명시히지 않아도, 기본적으로 NOT NULL 제약조건이 걸린다.  General Constraint무결정 제약조건을 걸 때, 키 제약조건, 널 제약조건, 참조 제약조건 등 다양한 제약 조건을 걸 수..

CS/기초데이터베이스

[데이터베이스] 14. SQL 집계 함수와 Group By

관계 대수에서는 없었지만, SQL에는 테이블에 있는 데이터들에 대해 다음의 5가지 집계 함수를 제공한다. 1. count()2. sum()3. avg()4. max()5. min() 이때 각 함수에는 하나의 컬럼이 들어가며, 1, 2, 3 은 그 컬럼에 대해 Distinct 를 취할 수도 있다.(4, 5번에도 사용은 가능하나 DISTINCT 를 취해도 같은 결과가 나온다.)  1. 모든 선원의 평균 나이SELECT avg(S.age)FROM sailors S;  2. 등급이 10인 선원의 평균 나이SELECT avg(S.age)FROM sailors SWHERE S.rating = 10;  3. 가장 나이가 많은 선원의 이름과 나이SELECT S.sname, S.ageFROM sailors SWHERE ..

에버듀
'CS' 카테고리의 글 목록 (3 Page)