데이터 : HDD에 저장되는 팩트

정보 : 데이터를 가공해 의미있게 만든 것. (데이터는 프로그램이나 질의를 통해 정보로 변환된다)


데이터베이스는 조직체의 응용 시스템들이 공유해서 사용하는 운영 데이터들이 구조적으로 통합된 모임이다

  • 데이터베이스 스키마 : 전체적인 데이터베이스의 구조로 내포라고 한다.

DEPARTMENT ( DEPTNO, DEPTNAME, FLOOR)

  • 데이터베이스 상태 : 특정 시점의 데이터베이스의 내용으로 외연이라고 한다.

DEPTNO

DEPTNAME 

FLOOR 

영업

2

기획

3

개발


스키마는 잘 바뀌지 않는 반면, 상태는 시간이 지남에 따라 계속해서 바뀐다.


데이터베이스는 데이터베이스와 시스템 카탈로그(데이터 사전)으로 구분할 수 있다.

시스템 카탈로그는 데이터베이스의 스키마 정보를 저장한다.



데이터베이스 관리 시스템(DBMS) : 데이터베이스를 정의하고, 질의어를 지원하고, 리포트를 생성하는 등의 작업을 수행하는 소프트웨어이다.

데이터베이스 언어라는 특별한 프로그래밍 언어를 한 개 이상 제공한다. SQL은 사실상 표준 데이터베이스 언어.

DBMS는 주기억 장치에 적재되어 실행되는데, 원하는 정보를 찾기 위해 중앙 처리 장치가 사용된다.

  • DBMS는 동시성 문제를 관리해준다. (사용자가 데이터에 동시에 접근했을 때)
  • DBMS는 운영체제와 응용 소프트웨어 사이에서 돌아가는 시스템 소프트웨어이다.
  • 트랜잭션(Transaction, 업무처리 단위)로 나누어 데이터를 백업하고 복원할 수 있다.
  • 데이터의 중복을 줄이거나 제어하며 일관성을 유지한다.
  • 특정 레코드에게 고유한 값을 줌으로써 데이터의 정확성을 유지하는 데이터 무결성을 지원한다.
  • 프로그램에 영향을 주지 않으면서 데이터베이스의 구조를 변경할 수 있음 >> 프로그램-데이터 독립성
데이터베이스 시스템을 쓰기 전에는 주로 파일 시스템으로 데이터를 관리했다.
하지만 데이터가 중복되고, 보안 조치나 백업기능이 없으며 응용 프로그램에 의존도가 높고, 동시성 제어가 되지 않는 등의 이유로 현재는 거의 쓰이지 않는다.
또한 데이터 값이 바뀌었을 때 모든 프로그램을 하나하나 바꿔주어야 하므로 데이터의 불일치 현상이 나타난다. (일관성 ↓)

DBMS 선정시 고려 사항
  • 기술적 요인 : 데이터 모델, 사용자 인터페이스, 프로그래밍 언어, 응용 개발도구 등
  • 경제적 요인 : 소프트웨어/하드웨어 구입 비용, 유지보수 비용, 직원들의 교육 지원

DBMS의 단점 : 데이터를 공유하다보니 프라이버시 보장이 안된다. 또한 투자비용에 비해 관리할 데이터가 많지 않다면 적자로 이어질 수 있다.



데이터 모델 : 데이터베이스의 구조를 기술하는데 사용되는 개념으로 세 가지 모델이 존재한다.

  1. 고수준 또는 개념적 데이터 모델 : 사람이 인식하는 것과 유사하게 데이터베이스의 논리적 구조를 명시. ex) 엔티티-관계(ER) 모델
  2. 표현(구현) 데이터 모델 : 사용자가 인식하는 것을 중심으로 하되, 저장되는 방법은 기계적. ex) 네트워크 데이터 모델, 관계 데이터 모델
  3. 저수준 또는 물리적 데이터 모델 : 데이터베이스에 데이터가 저장되는지를 명시.
  • 계층 DBMS : 트리 구조를 갖는 모델을 사용한 DBMS로써, 빠른 속도와 높은 효율을 제공할 때가 있지만 레코드들이 링크로 연결되어 있어 레코드 구조를 변경하기가 힘들다. 즉, 일대다 구조는 잘 처리하는 반면, 다대다 구조는 잘 처리하지 못한다.
  • 객체 지향 DBMS : 객체 지향 프로그래밍을 기반으로 하는 모델. 데이터를 그룹화하고 복잡한 객체를 이해하기 용이하다.
  • 전용 DBMS : 범용 데이터베이스 시스템에 맞지 않는 특정 프로그램을 위한 DBMS. 


데이터 언어

  • 데이터 정의어(DDL) : 데이터베이스 스키마를 정의할 때 사용하는 언어 
  • 데이터 조작어(DML) : 데이터 레코드를 조작하기 위한 언어로써 절차적 언어와 비절차적 언어가 있다.
  • 데이터 제어어(DCL) : 데이터베이스의 트랜잭션(작업)을 명시하거나 액세스 권한을 설정한다.

절차적 언어는 데이터를 가져오는 과정까지 관여하는 것이고, 비절차적 언어는 찾고자하는 데이터만 명시하는 것이다. (SQL은 비절차적 언어)

데이터 조작어는 대화식으로 입력되어 수행되거나, 고급 프로그래밍 언어로 작성된 프로그램에 내포되어 사용된다.



데이터베이스 사용자

  • 데이터베이스 관리자(DBA) : 조직의 여러 요구를 만족시키기 위해 DB스키마의 일관성을 유지하는 사람
  • 오퍼레이터 : DBMS의 전산실 관리자
  • 응용 프로그래머 : 데이터베이스 위에서 인터페이스를 구현하는 사람
  • 최종 사용자 : 데이터베이스를 사용하는 사람


ANSI/ SPARC 아키텍처 : 현재 대부분의 상용 DBMS 구현에서 사용되는 일반적인 아키텍처. 세 가지 단계로 이루어진다.

  1. 외부 단계 : 데이터베이스의 각 사용자가 갖는 뷰. 동일한 개념 단계에서도 다수의 서로 다른 뷰가 나타난다.
  2. 개념 단계 : 데이터베이스의 사용자 공동체의 뷰. 조직체 전체에 대한 스키마를 포함하며 하나의 DB에 하나의 개념 스키마가 존재한다.
  3. 내부 단계 : 데이터베이스의 물리적 뷰. 물리적인 데이터 구조에 관한 스키마이다. 실질적인 저장을 표현하는 단계
DBMS는 내부단계를 보여주지 않고, 사용자에게 필요한 외부단계를 보여준다.
또한 DBMS는 세 단계 간에 맵핑(mapping)을 통해 질의를 변환한다.
  • 외부/개념 사상 : 외부 단계의 뷰를 사용해서 입력된 사용자의 질의를 개념 단계의 스키마를 사용한 질의로 변환
  • 개념/내부 사상 : 이를 다시 내부 단계의 스키마로 변환하여 디스크의 데이터베이스를 접근

데이터 독립성 : 상위 단계의 스키마 정의에 영향을 주지 않으면서 어떤 단계의 스키마 정의를 변경하는 것
  • 논리적 데이터 독립성 : 개념 스키마가 변하더라도 외부 스키마가 변하지 않는 것
  • 물리적 데이터 독립성 : 내부 스키마가 변하더라도 개념 스키마가 변하지 않는 것

* ODBC(Open Database Connectivity) : Microsoft사의 데이터베이스 API이다. 

개발자가 DB간 공통적으로 사용할 수 있는 API만 알게 되면 여러 회사의 DB에 접근할 수 있다.


데이터베이스 시스템 구조는 중앙 집중식과 분산식으로 나눌 수 있다.

  • 중앙 집중식 DBMS : 하나의 중앙 컴퓨터 시스템에서 데이터베이스 시스템을 운영
  • 분산 DBMS : 데이터베이스 시스템이 네트워크를 통해 여러 컴퓨터에 나누어져 있는 형태.
중앙 집중식 DBMS는 사용자가 많을 경우 트래픽이 초과될 위험이 있기 때문에 분산 DBMS시스템이 유리하다.
이는 또한 경제적인 면에서 하나의 고가 컴퓨터보다 여러 대의 저가 컴퓨터가 유리하다.


운영체제가 담당하는 기능 중 하나인 메모리 관리는 쾌적한 프로그래밍과 overhead를 최소화하고 성능을 극대화하기 위해 꼭 필요한 기능이다.


따라서 운영체제는 실행되고 있는 작업(프로세스)들에게 메모리를 적절히 분배하며 작업이 끝나면 할당한 메모리를 회수한다.


운영체제에서 대표적인 메모리 관리 기법으로는 CMA, Paging, Segmentation 등이 있는데,

이 기법들은 메인 메모리(M·M)에 작업들을 어떻게 할당하느냐에 따라 그 성격이 나뉘게 된다.


하나하나 알기쉽게 같이 공부해보도록 하자.



CMA (Contiguous Memory Allocation)

영어로 쓰면 상당히 어려운 개념으로 보이지만, 연속 메모리 할당이라고 간단하게 해석할 수 있다.


프로세스가 실행될 때 프로세스는 OS에게 메모리를 요청한다.

만약 메모리 공간 상에 요청한 만큼의 공간이 남아있으면 메모리를 할당해 주지만, 그렇지 않다면 그만큼의 메모리가 생길 때 까지 기다려야 한다.


CMA방법으로 메모리를 할당해준다는 것은 남아있는 메모리를 계산할 때 따로따로 떨어져있는 메모리를 합쳐서 계산하는 것이 아니라

연속적인 메모리 공간을 계산한다는 것이다.


이른바 작업들을 할당할 때 작업을 분할하지 않고 통째로 메모리에 올린다는 뜻인데, 그림을 한번 살펴보자.


 메인 메모리

              5K

 Job.1    3K 

              2K

 Job.7    5K

 Job.3   4K

             3K

 Job.5    5K


이런식으로 메모리가 할당되어있다고 하자. 작업은 1, 3, 5, 7이 각각 3K, 5K, 4K, 5K만큼 할당되어 있고 비할당 메모리는 총 10K이다.  


이제 Job.11 이 실행하고자 OS에게 6K만큼의 메모리를 요구했다.

CMA 방법에서는 Job을 분할하지 않기 때문에 현재로써는 들어갈 공간이 없다.


따라서 Job들을 메모리 상에서 이동시켜 6K 이상의 공간을 만들어줘야 한다.

이 때 원칙은 가장 적은 메모리 이동으로 하나의(One single hole) 여유공간을 만들어줘야 한다는 것이다.

이 과정을 컴팩션(Compaction)이라고 하는데, 위의 예시를 Compaction시킨 결과는 다음과 같다.


 메인 메모리

              5K

              3K 

              2K

 Job.7    5K

 Job.3   4K

 Job.1    3K

 Job.5    5K


Job.1 을 Job.3 과 Job.5 사이의 빈 공간에 넣어줌으로써 최소한의 이동으로 하나의 여유공간을 만들었다.


이처럼 메모리에 작업단위로 프로세스를 할당시키면 작업이 끊기지 않고 논리적으로 잘 수행될 수 있다는 장점이 있지만,

메모리 공간이 부족할 때 Compaction을 하는 과정에 있으면 작업이 중단되며 오버헤드가 발생한다.


또한 비용도 많이 들기 때문에 실상 잘 사용하지 않는 메모리 관리 기법이라고 할 수 있겠다.



Paging

페이징 기법은 메인 메모리를 일정한 사이즈의 할당공간인 frame으로 쪼갠 뒤 프로세스도 그 크기에 맞게 나누어 할당하는 기법을 말한다.

frame 사이즈에 맞춰 프로세스를 나눈 단위를 page라고 하는데, 이 페이지들은 페이지 테이블에 순서에 따라 저장된다.


하나의 프로세스는 하나의 페이지 테이블을 갖고, 테이블은 인덱스와 내용으로 구성되어 있는데 

인덱스는 페이지의 순서를, 내용은 메인 메모리에 들어가는 위치를 가지고 있다.

그림을 보면서 이해해보도록 하자.


위와 같이 프로세스는 페이지 네 개로 나뉘고 테이블은 페이지의 인덱스를 메모리의 위치에 맞춰 저장하는 것이다.


이처럼 페이징은 메인 메모리가 일정한 단위로 나누어져있기 때문에 추가적인 메모리 할당이 요구될 때 Compaction을 할 필요가 없다.


하지만 논리적으로 같은 메모리 영역에 있어야 할 작업들이 나누어지므로 작업을 수행할 때 메모리를 탐색하기 때문에 오버헤드가 발생한다는 단점이 있다.

heap, stack, function과 같은 요소가 논리적인 작업에 속한다.


또한 만약 3.8K의 프로세스가 있다면 1K씩 페이지를 할당한다고 했을 때 0.2K가 남는 것처럼 불필요한 공간이 생길 수 있는데

이를 internal fragmentation(내부 단편화) 라고 한다.

이를 해결하기 위해서 0.1K 씩 페이지를 할당하게 된다면 내부 단편화 문제는 해결되어도 페이지 수가 많아지기 때문에 테이블의 크기가 커진다는 단점이 있다.



Segmentation

세그멘테이션 기법은 페이징 기법에서 나타나는 내부 단편화 문제를 해결하기 위해 고안된 방법으로

프로세스를 서로 다른 크기로 나누어 메모리에 할당하는 방법을 말한다.


이 때 나눈 부분을 세그멘테이션, 섹터라고 부른다.


세그멘테이션은 일반적으로 페이징 기법에 기반하여 사용되는데,

스택과 힙, 함수와 같이 논리적인 부분만 같은 구역에 넣어주고 나머지 부분은 page로 나누어 메모리에 할당하는 식으로 많이 사용된다.


하지만 이 세그멘테이션 기법은 각각의 섹터에 대해 페이지 테이블이 존재하기 때문에 접근할 때 오버헤드가 발생하고

페이지가 너무 잘게 쪼개져 있어 할당하기가 힘든 external fragmentation(외부 단편화) 문제가 발생하게 된다.



다음과 같이 세 가지 메모리 관리 기법을 알아보았다.


메모리 관리는 운영체제에 있어서 정말 필수적이고도 중요하기 때문에 운영체제를 공부하는 사람이라면

적어도 위의 세 가지 방법은 꼭 숙지하고 있어야 하겠다.



+ Recent posts