Skip to main content

npm 업데이트시 npm 폴더가 사라졌을 때

· One min read

npm으로 npm의 버전을 업데이트 할 때의 명령어는 다음과 같다.

npm install -g npm

업데이트 명령 실행 후 오류가 발생한 뒤 npm 명령어가 없다는 경우가 생길 수 있다. 당황하지 말고 아래 명령어를 실행한다.

## 캐시 강제 삭제
$ npm cache clean -f

## npm 다운로드
$ curl http://npmjs.org/install.sh | sh

다시 npm이 설치되어 npm 명령어를 실행할 수 있다.

Angular2 with Webpack

· 14 min read

앞서

정말 angular2 를 배우고 싶었다.

대세는 angular2 와 react 가 되었지만 angular2 를 선택한건 angular1 에 반했었고 구글이기 때문이었다. 근데 angular2 를 사용하려면 typescript 를 알아야하고, systemjs 또는 webpack 을 알아야하며 rxjs, corejs, zonejs, karma, e2e 등 새로운 기술을 너무 많이 알아야되었다.

대부분이 여기서 좌절(?)해 react 나 vue 로 가려고 하는 것 같다. 러닝 커브가 상당했던 이유는 이러했다.

  • angular2 의 포스트는 이론만 많았다.
  • 실전을 찾으면 버전이 알파 또는 베타 버전이라 현재와는 호환이 안된다.
  • 설치법은 알려주지도 않는다. (다 nodejs 개발자라 생각하는 것 같다.)
  • 어떤 패키지가 무슨 기능에 사용되는지 하나도 알려주지 않는다.
  • 심지어 공식 홈페이지의 starter-kit 을 clone 하면 오만가지의 테스팅 모듈도 다 딸려와 정신이 혼미하다.

2016 년에 자바스크립트를 배우는 기분은 대부분이 이런 것 같다.

하나하나 차근차근 알아가며 angular2 로 빠져보자.

npm

먼저 angular2 (이하 ng2)는 npm 으로 설치를 해야한다.

npm 이 무엇인가? bower, composer, maven 같은 패키지 다운로드 매니저이다. 더 쉽게 말하면 자바스크립트 라이브러리를 다운로드하고 관리해주는 프로그램이라 생각하자.

nodejs 다운로드에서 맞는 윈도우 버전을 다운로드해 설치하자.

package.json

npm 으로 자바스크립트 라이브러리를 다운받기 위해선 package.json(설정파일)이 필요하다. 원하는 위치에 폴더를 만들자. (D:\workspace\ng-test)

그리고 package.json 파일을 폴더 하위에 만든다.

package.json
{
"name": "ng2-webpack-start",
"version": "0.1.0",
"dependencies": {
"@angular/common": "^2.4.6",
"@angular/compiler": "^2.4.6",
"@angular/core": "^2.4.6",
"@angular/forms": "^2.4.6",
"@angular/http": "^2.4.6",
"@angular/platform-browser": "^2.4.6",
"@angular/platform-browser-dynamic": "^2.4.6",
"@angular/router": "^3.4.6",
"core-js": "^2.4.1",
"reflect-metadata": "^0.1.9",
"rxjs": "^5.1.0",
"zone.js": "^0.7.6"
}
}

설명

  • name : 프로젝트의 이름
  • version : 버전 기법에 맞게 원하는대로 적는다.
  • dependencies : ng2 프로젝트에 사용할 js library 의 이름과 버전을 적는다.
    • @angular/common : ng2 의 기본 모듈
    • @angular/compiler : ng2 의 template 을 위해 필요한 모듈
    • @angular/core : ng2 의 기본 모듈
    • @angular/forms : ng2 로 form 을 다루기 위한 모듈
    • @angular/http : 비동기 서버 통신을 위한 모듈
    • @angular/platform-browser : ng2 를 브라우저로 표시하기 위한 모듈
    • @angular/platform-browser-dynamic : ng2 를 브라우저로 표시하기 위한 모듈
    • @angular/router : 라우팅 기능 모듈
    • core-js : js 의 최신 문법을 사용하기 위함
    • reflect-metadata : metadata 문법을 사용하기 위함
    • rxjs : observables 기능을 사용하기 위함
    • zone.js : async 함수의 도착 지점을 알기 위함

ng2 의 기능들과 그 기능을 하위버전 브라우저에서도 사용하기 위한 라이브러리들을 포함했다.

설치

프로젝트에서 쉘을 실행시켜 설치를 진행하자.

npm install

node_modules 폴더가 생성된 걸 확인할 수 있다.

Hello World

  • src 라는 폴더를 새로 만든다. (D:\workspace\ng-test\src)
  • index.html 과 main.ts 파일을 생성한다.

index.html

index.html
<!doctype html>
<html>
<head>
<title>Hi Angular2</title>
</head>
<body>
<main>Loading...</main>
</body>
</html>

main.ts

main.ts 는 ng2 의 기능을 하나로 통합시켜주는 시작 스크립트이다.

main.ts
import "core-js";
import "reflect-metadata";
import "zone.js/dist/zone";

import { platformBrowserDynamic } from "@angular/platform-browser-dynamic";
import { AppModule } from "./app/app.module";

platformBrowserDynamic().bootstrapModule(AppModule);

app.module.ts

  • src 밑에 app 폴더를 만든다.
  • src\app\ 아래에 app.module.ts 파일을 생성한다. (D:\workspace\ng-test\src\app\app.module.ts)
app.module.ts
import { BrowserModule } from "@angular/platform-browser";
import { NgModule } from "@angular/core";
import { AppComponent } from "./app.component";

@NgModule({
imports: [BrowserModule],
declarations: [AppComponent],
bootstrap: [AppComponent],
})
export class AppModule {}

이 파일은 ng2 에서 어떤 모듈을 사용할지 알려준다.

설명

  • imports : 이 모듈에 필요한 다른 모듈
  • declarations : 모듈에 속하는 뷰 클래스, 앵귤러에는 components, directives, pipes 라는 세가지 뷰 클래스가 있다.
  • bootstrap : 메인 Component 지정 (root 모듈만 지정해야함)

컴포넌트란 무엇인가? 컴포넌트는 화면(뷰)를 제어하는 자바스크립트 클래스이다.

app.component.ts

app.module.ts 에서 사용할 메인 컴포넌트를 생성하자.

app.component.ts
import { Component } from "@angular/core";

@Component({
selector: "main",
template: ` <h1>Hello World</h1> `,
})
export class AppComponent {}

설명

  • selector : 어떤 위치에 삽입할지 attribute 이름을 적는다.
  • template : 어떤 템플릿을 사용할지 ` 기호를 사용해 적는다.

여기까지가 ng2 의 가장 기본적인 틀이다. 이제 실행을 하기 위해 만만치 않은 작업이 남았다.

TypeScript

ng2 는 typescript 를 주 언어로 사용한다. typescript 는 javascript 의 상위 집합이다. 상위집합이란 말이 어렵다면.. 그냥 javascript 랑 똑같다고 생각해도 된다. 똑같이 코딩해도 된다. 거기에 java 처럼 type 을 곁들여 코드를 짤 수 있다.

하지만 브라우저에서 실행하려면 javascript 로 compile 을 해줘야한다. 쉽게 java(ts)로 짜고 class(js)로 컴파일해야 실행되는 구조라 이해하자. 그러기 위해 몇가지 라이브러리를 npm 에서 추가로 설치해줘야한다.

## 타입스크립트 다운로드
$ npm install --save-dev typescript

위 명령어를 실행하면 개발버전(save-dev)으로 typescript 라이브러리가 설치된다. package.json 을 보면 devDependencies 옵션 밑에 의존성이 추가 된 것을 볼 수 있다.

tsconfig.json

typescript 를 javascript 로 컴파일하기 위해 기본 옵션을 설정해줘야한다. root 에 tsconfig.json 파일을 만들자.

tsconfig.json
{
"compilerOptions": {
"target": "es5",
"experimentalDecorators": true,
"emitDecoratorMetadata": true
}
}
  • target : javascript es5 버전으로 컴파일을 한다.
  • experimentalDecorators : 데코레이터 기능을 사용하기 위해 true 로 설정한다.
  • emitDecoratorMetadata : 데코레이터 기능을 사용하기 위해 true 로 설정한다.

여기까지가 ng2 의 typescript 기본 설정이다.

compile

아래 명령어를 실행한다.

$(npm bin)/tsc --rootDir src --outDir dist

image from hexo 실행이 되고 dist 폴더 아래 typescript 가 javascript 로 컴파일된 게 보인다. 근데 아직까진 여러 오류가 보인다. es6 의 기능을 사용할 수 없다는 오류인데 우리에겐 core-js 라이브러리가 있으니 typescript 에 core-js 를 사용하고 있다고 알려주자.

typings

라이브러리를 사용하고 있다고 알려주기 위해선 typings 를 설치해야한다.

npm install --save-dev typings

core-js

core-js 에 type 이 들어간 interface 를 typings 로 추가한다.

$(npm bin)/typings install --global --save dt~core-js

typings 폴더와 typings.json 파일이 추가된 것을 확인할 수 있다. 다시 컴파일을 해보면 오류 없이 js 로 컴파일 된다.

custom scripts

매번 $(npm bin)/... 명령어를 치기는 너무 귀찮다. package.json 을 열어 명령어를 줄인 script 기능을 사용해보자.

{
"name": "ng2-webpack-start",
"version": "0.1.0",
"scripts": {
"build": "tsc --rootDir src --outDir dist",
"postinstall": "typings install"
}
...
}

이렇게 추가하면 쉘에서 npm run build 명령어로 컴파일을 할 수 있다. 또한 postinstall 스크립트를 활성화하면 npm install 명령어 후에 바로 postinstall 명령어가 실행되어 한 번에 typings 모듈까지 설치를 할 수 있다.

../dist/main.js 를 index.html 에 추가하고 브라우저에서 열어보자.

index.html
<!doctype html>
<html>
<head>
<title>Hi Angular2</title>
</head>
<body>
<main></main>
<script src="../dist/main.js"></script>
</body>
</html>

index.html 을 열면 아래와 같은 오류가 나온다. image from hexo

이 오류는 commonjs 환경이 아니여서 발생한다.

commonjs 는 무엇인가? nodejs 와 같이 require 함수를 사용해 javascript 를 가져오는(import) 환경을 말한다.

해결하기 위해 Webpack 을 설치하자.

Webpack

Webpack 은 무엇인가? 내가 원하는 모든 파일을 하나의 javascript 파일로 불러올 수 있게 하는 모듈 번들러다.

설치

npm install --save-dev webpack

webpack 이 typescript 파일을 로드하기 위해선 typescript loader 모듈을 설치해줘야한다.

typescript-loader

npm install --save-dev awesome-typescript-loader

설치 후에 tsconfig.json 파일을 열어 webpack 을 사용한다는 옵션을 줘야한다.

tsconfig.json
{
"compilerOptions": {
"target": "es5",
"experimentalDecorators": true,
"emitDecoratorMetadata": true
},
"awesomeTypescriptLoaderOptions": {
"useWebpackText": true
}
}

설정

root 에 webpack.config.js 파일을 만들자.

webpack.config.js
const webpack = require("webpack");
const path = require("path");

module.exports = {
entry: "./src/main.ts",
output: {
path: path.resolve(__dirname, "./dist"),
filename: "app.bundle.js",
},
plugins: [
new webpack.ContextReplacementPlugin(
/angular(\\|\/)core(\\|\/)src(\\|\/)linker/,
path.resolve(__dirname, "./src"),
{},
),
],
module: {
loaders: [{ test: /\.ts$/, loaders: ["awesome-typescript-loader"] }],
},
resolve: {
extensions: [".ts", ".js"],
modules: [path.resolve(__dirname, "node_modules")],
},
};

설명

  • entry : 웹팩이 읽을 파일
  • output : 어디로 파일을 내보낼지
  • plugins : 어느 추가 플러그인을 사용할지
  • module : 파일을 가져오는데 어떤 모듈을 사용할지
  • resolve : 모듈을 어디서 찾을지

plugins 에 angular 설정을 주지 않으면 오류가 발생한다.

실행

package.json 에서 build script 를 변경한다.

package.json
{
"name": "ng2-webpack-start",
"version": "0.1.0",
"scripts": {
"build": "webpack --progress"
...
}
...
}

dist 폴더를 삭제한 뒤 빌드 스크립트를 실행한다.

## 쉘에서
$ rm -rf dist
## 터미널에서
$ rmdir dist

## 빌드 실행
$ npm run build

dist/app.bundle.js 가 생성된 것을 확인할 수 있다. index.html 에서 app.bundle.js 를 가져오게 추가한 뒤 실행해보자 image from hexo

구조

현재까지의 폴더 구조는 이렇다. image from hexo

webpack-dev

매번 컴파일할 수 없으니 자동으로 컴파일이 되고 브라우저로 볼 수 있게 해보자.

설치

webpack-dev-serverhtml-webpack-plugin을 설치한다.

npm install --save-dev webpack-dev-server
npm install --save-dev html-webpack-plugin

html-webpack-plugin

webpack.config.js에 html plugin 설정을 추가한다.

webpack.config.js
const webpack = require("webpack");
const path = require("path");
// 여기를 추가
const HtmlWebpackPlugin = require("html-webpack-plugin");

module.exports = {
plugins: [
new webpack.ContextReplacementPlugin(
/angular(\\|\/)core(\\|\/)src(\\|\/)linker/,
path.resolve(__dirname, "./src"),
{},
),
// 여기를 추가
new HtmlWebpackPlugin({
template: "./src/index.html",
}),
],
};

index.html 에서 스크립트 삽입부분을 지운다.

index.html
<!doctype html>
<html>
<head>
<title>Hi Angular2</title>
</head>
<body>
<main></main>
</body>
</html>

webpack-dev-server

package.json 에 start 스크립트를 추가한다.

package.json
    "start": "webpack-dev-server --inline --progress"

실행

## 다시 빌드
$ npm run build
## 서버 시작
$ npm start

다시 빌드하면 dist/index.html 이 생성되고 webpack 이 생성해준 script 가 자동으로 들어가 있는걸 확인할 수 있다.

dist/index.html
<!doctype html>
<html>
<head>
<title>Hi Angular2</title>
</head>
<body>
<main></main>
<script type="text/javascript" src="app.bundle.js"></script>
</body>
</html>

서버를 시작하고 localhost:8080/dist/index.html 로 접속해보자. image from hexo

localhost:8080으로 접속해도 동일한 화면이 보인다. 이제 app.component.ts 에서 Hello World 구문을 조금 수정해보자.

바로 반영되어 브라우저에 보여지는 걸 확인할 수 있다. image from hexo

여담

이로써 ng2-webpack 기본틀이 완성되었습니다.

github에서 통소스를 보실 수 있습니다. css-loader, style-loader, file-loader, template-loader 등 webpack 에 로더 플러그인을 더 추가해야 실서비스에 사용할 수 있습니다.

Angular2 with Angular-cli로 이어집니다.

👏👏👏 고생하셨습니다.

cURL error 60 SSL certificate problem

· One min read

window localhost php 에서 cURL 함수 사용시 cURL error 60: SSL certificate problem...으로 시작하는 오류가 발생할 때가 있다.

image from hexo

해결

키 다운로드

root certificate bundle을 다운로드 받아 php 하위 경로로 넣어준다.

등록

php.ini에서 키를 추가한다.

php.ini
[curl]
; A default value for the CURLOPT_CAINFO option. This is required to be an
; absolute path.
curl.cainfo = D:/php7/extras/ssl/cacert.pem

참조

Nginx for Windows - 3. Virtual Host

· 2 min read

Nginx - 2. PHP 연동에서 이어집니다.

설정

conf\nginx.conf 파일에서 쉽게 추가가 가능하다.

nginx.conf
http {
# 기존에 있던 default 설정
server {
...
}

# 이렇게 server 구문을 하나 더 추가한다.
server {
listen 8000;
# 서버 주소
server_name local.test.com;
index index.php;
# 서버 경로
root D:/workspace/testphp/;

location / {
try_files $uri /index.php$is_args$args;
}

# php 사용을 개별로 추가해야한다.
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass 127.0.0.1:9123;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
...
}

위 소스는 index.php를 라우터로 사용하기 위해 설정되었으므로, 17, 22, 23줄의 구문은 없어도 된다.

Host 파일 수정

Apache Virtual Host 설정 문서의 Host 파일 수정 메뉴를 따라 진행하면 된다.

연동 확인

nginx 서비스를 재시작하고 확인한다.

Nginx for Windows - 2. PHP 연동

· 3 min read

Nginx 설치에서 이어집니다.

Nginx를 설치했으니 PHP와 연동을 해보자.

설치

이전 포스트로 대체한다. Apache버전은 상관이 없으니 x64 Thread Safe 버전으로 3번까지만 따라서 설치하면된다.

연동

nginx 설정

Nginx 폴더에서 conf/nginx.conf를 수정한다.

http {
...
server {
...
location / {
root html;

# index.php를 추가
index index.html index.htm index.php;
}
...
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
# 이 부분 주석을 모두 제거해준다.
location ~ \.php$ {
root html;

# nginx에서 9123포트를 추천한다.
fastcgi_pass 127.0.0.1:9123;
fastcgi_index index.php;

# SCIPRT를 $document_root 로 변경
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
...
}
}

php-cgi 설정

nssm을 사용하는 방법과 배치 파일을 만드는 방법이 있는데 전자를 추천한다. bat 파일은 nginx restart를 할 때마다 따로 실행해줘야한다.

다른 포스팅에는 php-cgi 서비를 cmd에서 sc create 명령어를 사용하여 등록하는 부분이 있는데 windows10 환경에서 서비스가 1053 오류를 뱉으며 죽는다. 시간 낭비하지 말자.

nssm

nginx에 지난 스텝에서 설치한 nssm을 사용한다. nginx\nssm\win64 폴더로 이동해 php 등록 커맨드를 입력한다.

./nssm.exe install php

php-cgi 경로를 선택한 뒤 아래 명령어를 Arguments 필드에 넣어준다.

## 경로를 알맞게 수정해주자.
D:\php7\php-cgi.exe -b 127.0.0.1:9123 -c D:\php7\php.ini

image from hexo

서비스를 실행한다. image from hexo

실행이 안되는 경우 arguments에 앞의 경로를 제거하고 -b 127.0.0.1:9123 -c D:\php7\php.ini 만 입력해준다.

bat

배치 파일을 만들어 nginx가 실행 되기전만 php-cgi를 킬 수도 있다.

@ECHO OFF
ECHO Starting PHP CGI...
set PATH=D:\php7;%PATH%
D:\php7\php-cgi.exe -b 127.0.0.1:9123 -c D:\php7\php.ini

위 소스의 경로를 알맞게 수정한 뒤 start-php-cgi.bat으로 저장 후 실행한다.

확인

**nginx\html\**에 index.php를 만든다.

index.php
<?php
phpinfo();

localhost:88/index.php로 접속한다. image from hexo

여담

한 방에 설치하는 방법도 있지만 현재 버전까지는 C:\말고 D:\에 php를 설치한 사람에 대한 배려는 없다. (bat 파일을 건드려봐도 dll 안에 로깅하는 부분에서 오류 발생)

Nginx for Windows - 1. Setup

· 2 min read

Windows에서 Nginx로 로컬 웹서버를 돌려보자.

설치

다운로드

Nginx 홈페이지에서 Windows 버전을 다운로드 받는다. image from hexo

압축을 풀어 원하는 위치(D:\nginx)로 옮겨주자

설정

apache, iis가 중복이 된다면 conf/nginx.conf 파일을 열어 포트 설정을 바꿔준다.

nginx.conf
http {
...
server {
listen 88; # 여기를 수정해주자.
server_name localhost;
...
}
...
}

실행

nginx.exe를 더블 클릭한다.

서비스 등록

실행은 되었지만 서비스를 등록해야 자동으로 실행되고 on/off를 관리하기가 쉽다. 다른 포스트에 있는 github의 2011년 엔진엑스 서비스 등록 소스는 찾아봐도 없길래 새로운 방법으로 등록한다.

nssm

nssm에서 서비스 등록 프로그램을 다운받는다. image from hexo

압축을 풀어주고(D:\nginx\nssm-2.24) 자신의 windows bit에 맞는 폴더에서 nssm.exe를 커맨드로 실행하면 된다.

./nssm.exe install nginx

nginx 경로를 잡아주고 Install Service 버튼을 클릭한다. image from hexo

실행

services.msc를 실행해 서비스 창을 열어 nginx를 실행한다. image from hexo

확인

image from hexo

Nginx - 2. PHP 연동으로 이어집니다.

전자계산기 구조 정리

· 91 min read

불 대수

  • 영국 수학자 불에 의해 개발
  • AND : 입력 값이 모두 1일 때 1 출력
  • OR : 입력 값이 하나라도 1일 때 1 출력
  • NOT : 부정

기본 공식

  • 합의 곱을 곱의 합으로 변환
  • 분배법칙 예외 : A +(B×C) = (A + B)(B + C)
  • 드모르강
    • (A + B)` = A`×B`
    • (A×B)` = A`+ B`
  • 멱등
    • A + A = A
    • A×A = A
  • 보수
    • A + A` = 1
    • A×A` = 0
  • 항등
    • A + 0 = A
    • A + 1 = 1
    • A×0 = 0
    • A×1 = A
  • 콘센서스
    • AB + BC + CA` = AB + CA`
    • (A + B)(B + C)(C + A`) = (A + B)(C + A`)
  • 복원 : A`` = A
  • 기타
    • A + A`B = A + B
    • A + AB = A

카르노 맵

  • 설계된 논리식을 도표로 표현하여 최소화 하는 방법
  • Karnaugh map = K-map = 카노맵

카르노 맵 AB와 CD의 위치를 바꾸어 계산하는게 쉽다.

00011110
000132
014576
1112131514
10891110

논리 게이트

  • BUFFER : 입력된 정보를 그대로 출력
  • NAND : NOT + AND
  • NOR : NOT + OR
  • XOR : 입력이 같으면 0, 다르면 1
    • X = A⊕B
    • X = A`B + AB`
    • X = (A + B)(A` + B`)
  • XNOR : NOT + XOR
    • X = A⊙B
    • X = (A⊕B)`
    • X = AB + A`B`

조합논리회로

반가산기, 전가산기, 병렬가산기, 반감산기, 전감산기, 디코더, 인코더, 멀티플렉서, 디멀티플렉서, 다수결회로, 비교기 등

반가산기

2진수 두 개를 더한 합과 자리올림수를 구하는 조합논리회로

  • 합은 S, 자리올림(캐리)는 C
  • C = AB
  • S = A`B + AB` = A⊕B

전가산기

1bit 2진수 3자리를 더하여 합과 자리올림수를 구하는 조합논리회로

  • 두 개의 반가산기와 한 개의 OR GATE로 구성
  • 합은 S, 자리올림(캐리)는 C
  • C = (A⊕B)C + AB
  • S = (A⊕B)⊕C
  • 3 × 8 디코더 1개 + 4 입력 OR 게이트 2개로 구성가능

병렬가산기

n bit로 된 2진수 A, B에 대한 덧셈을 n개의 전가산기를 이용하여 구현한 실질적인 가산기

  • 전파지연을 줄이기 위해 Carry Look Ahead 사용
  • 전파지연 : ALU Path에서 가장 긴 Delay

반감산기

1bit 2진수 2자리에 대한 감산을 하는 조합논리회로

  • 차는 D, 빌려온 수는 B
  • B = A`B
  • D = A`B + A`B = A⊕B
  • 2 × 4 디코더 1개 + 3 입력 OR 게이트 1개로 구성가능

디코더

n bit의 코드화된 정보를 그 코드의 각 bit 조합에 따라 2^n개의 출력으로 번역하는 조합논리회로

  • n개의 입력을 2^n개의 출력으로
  • 명령어의 명령부나 번지를 해독할 때 사용
  • 주로 AND 게이트로 구성
  • 부호화된 데이터에서 정보를 찾아냄
  • n × 2^n 디코더의 AND 게이트 수 : 2^n 개
    • 5 × 8 디코더 : 8개

인코더

2^n개의 입력선으로 입력된 값을 n개의 출력선으로 코드화해서 출력하는 조합논리회로

  • 2^n개의 입력을 n개의 출력으로
    • 16개의 입력선일 경우 4개의 출력선 필요 (2^4)

멀티플렉서

2^n개의 입력선 중 1개를 선택하여 그 선에서 입력되는 값을 1개의 출력선으로 출력하는 조합논리회로

  • 2^n개의 입력선 중 1개의 선을 선택하기 위해 n개의 선택선 이용
    • 16개의 입력선일 경우 4개의 선택선 필요 (2^4)
    • 출력선은 하나

디멀티플렉서

1개의 입력선으로 들어오는 데이터를 2^n개의 출력선 중 1개를 선택하여 출력하는 회로

  • 2^n개의 출력선 중 1개의 선을 선택하기 위해 n개의 선택선 이용
  • 16개의 출력선일 경우 4개의 선택선 필요 (2^4)
  • 입력선은 하나

순서논리회로

  • 외부의 입력과 현재 상태에 따라 출력이 결정
  • 논리 게이트 외에 메모리 요소와 피드백 기능을 포함
  • 기억기능 존재
  • 출력이 일정한 값을 갖지 않음
  • 플리플롭과 논리 게이트로 구성
  • 동기식과 비동기식으로 나뉨
  • 플리플롭, 카운터, 레지스터, RAM, CPU

플리플롭

  • 전원이 공급되는한 상태의 변화를 위한 외부신호가 발생할 때까지 현재의 상태를 그대로 유지하는 논리회로
  • 레지스터, 카운터, 반도체메모리(RAM)의 기본 구성요소
  • 2진수 1bit를 저장 가능
  • 두 개의 NAND 또는 두 개의 NOR 게이트를 이용하여 구성

특성표

순서논리회로의 기능을 나타내는 표로 입력선의 값에 따라 현재 상태가 다음 상태로 어떻게 변하여 저장되는지를 나타낸다.

여기표

특성표 대신 순서논리회로의 기능을 표로 나타낸 것, 현재 상태 값을 새로운 값으로 변경시키려면 입력선으로 어떤 값을 입력해야 하는가를 나타낸다. 출력을 이용하여 입력을 알아내는 것.

RS 플립플롭

  • Reset-Set FF
  • 특성표
SRQ
00
010
101
11不可
  • 여기표는 특성표를 떠올리면 구할 수 있다.

D 플립플롭

  • RS 플리플롭의 R선에 인버터(NOT 연산자)를 추가하여 S선과 하나로 묶어서 입력선을 하나만 구성한 플립플롭
  • 입력값을 그대로 저장하는 기능을 수행
  • 특성표
DQ
00
11

JK 플립플롭

  • RS에서 S=1, R=1일 때 동작하지 않는 점을 보완한 플립플롭
  • RS 플립플롭의 입력선 S와 R에 AND 게이트 2개를 추가하여 JK 플립플롭의 입력선 J와 K로 사용한다.
  • 모든 플립플롭의 기능을 포함한다.
  • 플립플롭의 네가지 기능을 모두 갖춘 것을 찾으라는 문제가 나오면 RS가 있으면 RS, JK가 있으면 JK
  • 특성표
SRQ
00
010
101
11보수
  • 여기표는 특성표를 떠올리면 구할 수 있다.

T 플립플롭

  • JK 플립플롭의 두 입력선을 묶어서 한 개의 입력선으로 구성한 플립플롭
  • T=1인 경우 현재 상태를 토글한다. 보수가 출력된다.
  • 카운터에 이용
TQ
0
1보수

M/S 플립플롭

  • 마스터-슬레이브 플립플롭
  • 출력 측의 일부가 입력 측에 피드백되어 유발되는 레이스 현상을 없애기 위해 고안된 플립플롭
  • 두 개의 플립플롭으로 구성
  • 레이스 현상 : 입력이 되는 조합회로의 출력을 플리플롭이 받는 동안 플리플롭의 내부 상태가 변하고 있으면 그 상태값이 피드백통로를 통해 조합회로로 전달되므로 회로가 불안정해지는 현상

자료 구성 단위

비트

  • 자료, 정보 표현의 최소 단위
  • 0과 1을 표시하는 2진수 1자리

니블

  • 4bit가 모여 구성
  • 16진수 1자리를 표현하기에 적합

바이트

  • 문자를 표현하는 최소 단위
  • 8bit가 모여 1Byte
  • 1Byte는 256가지의 정보를 표현(2^8bit)
  • Alphanumeric은 1Byte, 한글한자는 2Byte
  • KB = 2의 10승, MB = 2의 20승...

워드

  • 컴퓨터가 한 번에 처리할 수 있는 명령 단위
  • 전워드 : 4Byte (full word)
  • 하프워드 : 2Byte (반워드)
  • 더블워드 : 8Byte

필드

  • 파일 구성의 최소 단위
  • 의미 있는 정보를 표현하는 최소 단위

레코드

  • 하나 이상의 관련된 필드가 모여서 구성
  • 컴퓨터 내부 자료 처리 단위
  • 논리 레코드를 의미

블록

  • 물리 레코드
  • 하나 이상의 논리 레코드가 모여서 구성
  • 각종 저장 매체와의 입출력 단위를 의미

파일

  • 프로그램 구성의 기본 단위
  • 같은 종류의 여러 레코드가 모여서 구성

데이터베이스

  • 여러 개의 관련된 파일의 집합
  • 관계형, 계층형, 망형 DB

진법

2진수

정수는 나누고 소숫점은 곱하고

8진수

2진수를 구하고 3자리씩 묶고

16진수

2진수를 구하고 4자리씩 묶고

보수

  • 덧셈회로를 이용하여 뺄셈을 수행하기 위해 사용
  • 1의 보수 : 그냥 반전
  • 2의 보수
    • 1의 보수를 구한 뒤 1을 더함
    • 뒤에서부터 1이 나올때까지는 그냥쓰고 나머지는 반전

뺄셈

  • 1의 보수 이용 : 자리올림이 발생하면 결과에 자리올림수를 더한다.
  • 2의 보수 이용 : 자리올림이 발생하면 버린다.

고정 소수점

정수 데이터 표현 및 연산에 사용하는 방법

2진연산

  • 정수값을 2진수로 변환하여 표현하는 방식
  • 표현할 수 있는 범위가 작음
  • 연산속도 빠름
  • 맨처음 1bit는 부호비트로 사용

음수연산

  • 부호화 절대치법 : 양수 표현에 대해 부호비트만 바꾼다.
  • 부호화 1의 보수법 : 양수 표현에 대해 1의 보수를 구한다.
  • 부호화 2의 보수법 : 양수 표현에 대해 2의 보수를 구한다.
    • 1의 보수 표현법에 비해 음수 1개를 더 표현할 수 있다.
    • 자리올림을 무시하므로 1의 보수 표현에 비해 연산이 간단하다.
    • 0이 하나만 존재한다.

부호화 2진 표현을 10진수로 변경시

  1. 부호 비트를 빼고 2의 보수 연산
  2. 부호를 대입

10진연산

언팩연산

  • 존형 10진연산 = Zone Decimal
  • 연산이 불가능하다.
  • 데이터 입출력에 사용
  • 1Byte로 10진수 1자리를 표현
  • 4개의 존 비트와 4개의 숫자 비트를 사용
  • 최하위 바이트의 존 부분을 부호로 사용
  • Zone = F, Digit = 4Bit 2진수
  • Sign = 양수 C, 음수 D, 부호 없는 양수 F

팩연산

  • 연산이 가능
  • 데이터 입출력 불가능
  • 1Byte로 10진수 2자리를 표현
  • 최하위 바이트의 마지막 4Bit를 부호로 사용
  • Digit = 4Bit 2진수
  • Sign = 양수 C, 음수 D, 부호 없는 양수 F

부동소수점

  • 매우 크거나 작은 수, 매우 정밀한 수를 적은 비트로 표현 가능
  • 연산시간이 느림
  • 부동 소수점의 연산 수행횟수를 FLOPS로 표시
    • FLOPS : FLoating point Operations Per Second, 컴퓨터 연산속도의 단위
  • 지수부와 가수부를 분리하는 정규화 과정 필요 정규화 : 0.1 <= 가수부분 < 1 을 만족시키게 변경
  • 4Byte를 사용하는 단정도와 8Byte를 사용하는 배정도 표현법
  • 지수부에는 정규화해서 분리한 지수값을 64Bias법으로 표현
    • 64Bias : 지수 7Bit에 100 0000이 입력되어 있고 2^n의 n만큼을 더하고 뺴서 지수를 표현하는 방식

IEEE 표준

  • IEEE 754 표준
  • 정규화시 가수부가 1이되게 정규화
  • 127Bais를 사용해 지수 8Bit에 0111 1111이 들어있음
구분크기부호지수가수
single321823
double6411152
extended8011168

연산

덧셈 및 뺄셈

  1. 0인지 확인
  2. 지수가 큰쪽에 수를 맞추어 정규화
  3. 연산
  4. 결과 정규화

곱셈

  1. 0인지 확인
  2. 지수 덧셈
  3. 가수 곱셈
  4. 결과 정규화

나눗셈

  1. 0인지 확인
  2. 레지스터 초기화
  3. 부호 결정
  4. 나눠지는 수가 나누는 수보다 작게 나눠지는 수를 정규화
  5. 지수 뺄셈
  6. 가수 나눗셈

자료 표현

BCD

  • 2진화 10진코드 = Binary Coded Decimal
  • 6Bit 코드로 IBM에서 개발
  • 1개의 문자를 2개의 Zone Bit와 4개의 Digit Bit로 표현
  • 6Bit이므로 64개 문자 표현 가능
  • 1Bit의 Parity Bit를 추가해 7Bit로 사용
  • 영소문자 표현 불가

ASCII

  • American Standard Code for Information Interchange
  • 7Bit 코드로 미국 표준협회에서 개발
  • 7Bit이므로 128개의 문자 표현 가능
  • 1Bit의 Parity Bit를 추가해 8Bit로 사용
  • 영대소문자, 숫자, 제어문자, 특수문자 등 표현 가능
  • 통신 제어용 및 마이크로 컴퓨터의 기본코드로 사용

EBCDIC

  • 8Bit 코드로 IBM에서 개발
  • 1개의 문자를 4개의 Zone Bit와 4개의 Digit Bit로 표현
  • 8Bit이므로 256개의 문자 표현 가능
  • 1Bit의 Parity Bit를 추가해 9Bit로 사용
  • 특수문자, 영대소문자, 숫자 등 표현 가능

BCD 코드

  • 10진수 1자리를 2진수 4Bit로 표현
  • 8421 코드
  • 가중치 코드
    • 2진수 각 자리가 고유한 값을 가지는 코드
  • BCD에서 Zone을 생략한 형태
  • 10진수 입출력이 간편

Excess3 코드

  • BCD 코드에 3을 더하여 만든 코드
  • 모든 비트가 동시에 0이 되는 경우가 없다.
  • 3 초과 코드
  • 자기보수 코드
  • 비가중치 코드
  • 10진수를 표현하기 위함이다.
  • 보수를 구하기 편해 산술연산에 좋다.

Gray 코드

  • BCD 코드의 인접하는 Bit를 XOR 연산하여 만든 코드
  • 코드 변환이 용이
  • 입출력장치, A/D변환기, 주변장치 등에서 숫자를 표현할 때 사용
  • 1Bit만 변화시켜 다음 수치로 증가시키기 때문에 하드웨어 오류가 적다.
  • 2진수를 Gray로 변경시 : n자 모양으로 연산
    • 첫번째 그레이 비트는 2진수 첫번째 비트 그대로
    • 2진수 비트를 앞뒤로 XOR 연산
  • Gray를 2진수로 변경시 : h자 모양으로 연산
    • 첫번째 2진수는 그레이 비트 그대로
    • 두번째부턴 왼쪽 변경된 2진수와 변경할 우측 그레이 비트를 XOR 연산

패리티 코드

  • 전송된 코드의 오류를 검사하기 위해 데이터 비트 외에 1Bit의 패리티 체크 비트를 추가하는 것
  • 1Bit의 오류만 검출 가능

홀수 패리티

  • Odd Parity = 기수 패리티
  • 1의 갯수가 홀수가 되도록 0이나 1을 마지막에 추가

짝수 패리티

  • Even Parity = 우수 패리티
  • 1의 갯수가 짝수가 되도록 0이나 1을 마지막에 추가

해밍 코드

  • 오류를 검출하고 교정이 가능한 코드
  • 2Bit의 오류를 검출할 수 있고 1Bit를 교정 가능
  • 잉여비트가 많이 필요
  • 1, 2, 4, 8, ... 2^n번째 Bit는 오류 검출을 위한 패리티 비트
  • 패리티 비트 결정시
    • 1번 Bit는 1, 3, 5, 7...
    • 2번 Bit는 2, 3, 6, 7, 10, 11... 2Bit씩 건너 뛰면서
    • 4번 Bit는 4, 5, 6, 7, 12, 13, 14, 15... 4Bit씩 건너 뛰면서

코드 분류

가중치코드는 일반적으로 숫자로 이루어져 있다.

분류코드종류
가중치BCD(8421), 2421, 84-2-1, Biquinary, 51111, RingCounter
비가중치3초과(Excess3), Gray, Jonson, 2outof5, 3outof5
자기보수3초과(Excess3), 2421, 51111, 84-2-1
오류검출해밍, 패리티, Biquinary, RingCounter, 2outof5, 3outof5

중앙처리장치

제어장치, 연산장치, 레지스터, 버스로 구성

제어장치

  • 컴퓨터의 모든 장치에 대한 동작을 지시하고 제어
  • 명령 레지스터에서 읽어들인 명령어를 해독해 장치에 제어신호를 보내 명령을 수행하도록 지시
  • 제어장치에 입력되는 항목
    • 명령어 레지스터
    • 플래그
    • 클록

구성요소

  • 명령 레지스터 : 현재 실행중인 명령어 내용 기억
  • 명령 해독기(디코더) : 명령 레지스터에 있는 명령어를 해독
  • 제어 발생기(인코더) : 해독된 명령에 따라 각 장치로 본래 제어 신호 생성
  • 제어 주소 레지스터(CAR) : 다음에 실행할 마이크로 명령어의 주소를 저장하는 레지스터
    • 매핑의 결과값, 주소필드, 서브루틴 레지스터의 내용이 기록
  • 제어 버퍼 레지스터(CBR) : 제어 기억장치로부터 읽혀진 마이크로명령어를 일시적으로 저장하는 레지스터
  • 제어 기억장치 : 마이크로 프로그램을 저장하는 내부 기억장치
  • 순서 제어모듈 : 마이크로 명령어의 실행 순서를 결정하는 회로집합
  • 순차 카운터 : 디코더에 의해 선택된 번호에 해당하는 타이밍 신호를 생성

연산장치

  • 제어장치에 명령에 따라 실제로 연산을 수행하는 장치
  • 산술연산, 논리연산, 관계연산, Shift 등
  • 가산기, 누산기(AC), 보수기(Complementor), 데이터레지스터, 오버플로 검출기, 시프트 레지스터 등

레지스터

  • CPU 내부에서 처리할 명령어나 연산의 중간 결과값 등을 일시적으로 기억하는 임시 기억장소
  • 플리플롭이나 래치들을 병렬로 연결하여 구성
  • 메모리 중에서 속도가 가장 빠르다.
  • 레지스터의 크기는 워드를 구성하는 비트 개수만큼의 플립플롭으로 구성
    • 워드의 크기가 16Bit => 레지스터는 16개의 플립플롭이나 래치로 구성
  • 저장값을 0으로 하는 것을 설정해제(CLR)

자료전송

  • 직렬 전송 : 직렬 시프트 마이크로 오퍼레이션, 느림
  • 병렬 전송 : 하나의 클록펄스 동안 워드가 동시에 전송
  • 버스 전송 : 모든 레지스터가 공통으로 이용하는 경로, 병렬에 비해 결선의 수를 줄일 수 있다.

주요 레지스터

  • PC : 프로그램 카운터, 다음번 실행할 명령어의 번지를 기억하는 레지스터로 분기 명령이 실행되는 경우 그 목적지 주소로 갱신
  • IR : 명령레지스터, 현재 실행중인 명령의 내용을 기억하는 레지스터
  • AC : 누산기, 연산된 결과를 일시적으로 저장하는 레지스터
  • PSWR : Status Register, Program Status Word Register, Flag Regiester
    • 시스템 내부의 순간 상태가 기록된 정보를 PSW라 한다.
    • 오버플로, 언더플로, 자리올림, 계산상태, 인터럽트 등의 PSW를 저장하는 레지스터
    • 프로그램 제어와 밀접한 관계
  • MAR : 메모리 주소 레지스터, 데이터의 번지를 기억하는 레지스터
  • MBR : 메모리 버퍼 레지스터, 데이터가 잠시 기억되는 레지스터, CPU가 데이터를 처리하기 위해서 반드시 거처야한다.
  • Base Register : 명령이 시작되는 시작 번지를 기억하는 레지스터
  • Index Register : 주소의 변경, 서브루틴 연결 및 프로그램에서의 반복연산의 횟수를 세는 레지스터로 프로그래머가 내용을 변경할 수 있다.
  • Data Register : 연산에 사용될 데이터를 기억하는 레지스터
  • Shift Register : 저장된 값을 미는 연산을 하는 레지스터, 2배 길이 레지스터
  • Major Status Register : CPU의 현재상태(인출, 간접, 실행, 인터럽트)를 저장하고 있는 레지스터

버스

  • CPU, 메모리, I/O장치와 상호 필요한 정보를 교환하기 위해 연결하는 전송선
  • 내부회로에서 버스를 사용하는 목적은 결선의 수를 줄이기 위해서다.

종류

  • 제어 버스 : Control Bus, 양방향 전송선, 제어신호 전송
  • 주소 버스 : Address Bus, 번지 버스, 단방향 전송선, 번지 지정
  • 데이터 버스 : Data Bus, 자료 버스, 양방향 전송선, 데이터 전송
  • 내부버스 : CPU 및 메모리에 구성된 버스
  • 외부버스 : 주변 I/O장치에 구성된 버스

명령어

OP code부, Mode부, Operand부로 구성

연산자부

  • Operation Code부 = OP Code
  • 연산자부의 크기는 표현할 수 있는 명령의 종류를 나타내는 것
  • nBit일 때 최대 2^n의 명령어 표현 가능

모드부

  • Mode부
  • 주소부의 유효 주소가 결정되는 방법을 지정
  • 0이면 직접, 1이면 간접

자료부

  • Operand부 = 오퍼랜드부 = 주소필드
  • 실제 데이터에 대한 정보를 표시하는 부분
  • 주소, 레지스터 번호, 사용할 데이터 등을 표시
  • 자료부의 크기는 메모리 용량과 관계가 있다.

설계시 고려사항

  • 연산자의 종류
  • 명령어 형식
  • 주소지정방식
  • 데이터 구조
  • 효율성 제고방안 : 기억공간, 사용빈도, 주소지정방식, 주기억장치의 대역폭 이용

기능

함수 연산, 자료전달, 제어, 입출력 기능

함수 연산 기능

  • 산술연산 : ADD, SUB, MUL, DIV, 산술 Shift
  • 논리연산 : NOT, AND, OR, XOR, 논리 Shift, Rotate, Complement, Clear
  • 단항연산 : NOT, Complement, Shift, Rotate, Move
  • 이항연산 : 사칙, AND, OR, XOR, XNOR
  • 연산자 우선순위
    1. 산술연산자 : 거듭제곱 > 곱=나눔 > 덧,뺄
    2. 관계연산자
    3. 논리 연산자 : NOT > AND > OR

자료 전달 기능

  • Load : 기억장치 => CPU
  • Store : CPU => 기억장치 저장
  • Move : 레지스터간 자료 전송
  • Push : 스택에 자료 저장
  • Pop : 스택에서 자료 꺼냄

제어 기능

  • 무조건 분기 : GOTO, JMP (PC <- X)
  • 조건 분기 : IF, SPA, SNA, SZA
    • SPA : Skip if AC is Positive
    • SNA : Skip if AC is Negative
    • SZA : Skip if AC is Zero
  • Call : 부 프로그램 호출
  • Return : 부 프로그램에서 복귀

입출력 기능

  • Input
  • Output

연산

AND

  • 특정 비트를 삭제(Clear)하는 연산
  • Masking 연산

OR

  • 특정 비트를 1로 만드는 연산
  • Selective Set 연산

XOR

  • 두 개의 데이터를 비교하거나 특정 비트를 반전시킬 때 사용
  • 결과에 1Bit라도 1이 있으면 서로 다른 데이터
  • 반전시킬 Bit를 1과 XOR

NOT

  • 그냥 반전

논리 Shift

  • 0을 삽입해 비트를 좌우로 한칸씩 민다.

Rotate

  • Shift에서 밀려나간 비트를 반대편으로 가져와 입력하는 연산
  • 문자 위치를 변환할 때 사용

산술 Shift

  • 부호를 고려하여 자리를 이동시키는 연산
  • 2^n으로 곱하거나 나눌 때 사용
  • 왼쪽으로 Shift시 2^n을 곱한 값과 같음
  • 오른쪽으로 Shift시 2^n을 나눈 값과 같음
  • 홀수를 오른쪽으로 Shift시에 0.5의 오차 발생
  • 정수 표현 방식에서만 사용 가능
  • 정수 수치 표현 방법에 따라 Padding Bit 및 결과가 다름

Shift Left

  • 부호화 절대치, 2의 보수법은 무조건 0
  • 1의 보수법은 부호 비트와 같은 0, 1

Shift Right

  • 부호화 절대치는 0
  • 1의 보수법, 2의 보수법은 부호 비트와 같은 0, 1

명령어 형식

3주소 명령어

  • Operand부가 세 개로 구성되는 명령어 형식
  • **GPR(범용 레지스터)**를 가진 컴퓨터에서 사용
  • 연산의 결과는 Operand 1에 주로 기록 (컴퓨터에 따라 Operand 3에도 기록)

장점

  • 연산시 원래 자료를 파괴하지 않음
  • 다른 형식의 명령어를 이용하는 것보다 프로그램 전체의 길이가 짧음
  • 전체 프로그램 실행시 명령인출을 위해 주기억장치를 접근하는 횟수 감소

단점

  • 명령어 한 개의 길이가 너무 길어짐
  • 하나의 명령을 수행하기 위해 최소한 4번 기억장소에 접근해야함
  • 수행시간이 길다.

2주소 명령어

  • Operand가 두 개로 구성되는 일반적인 명령어 형식
  • 여러 개의 **GPR(범용 레지스터)**를 가진 컴퓨터에서 사용

장점

  • 실행 속도가 빠르고 기억장소를 많이 차지하지 않음
  • 3주소 명령에 비해 명령어의 길이가 짧음
  • 계산결과가 기억장치에 기억되고 CPU에도 남아 있어 계산 결과를 시험할 때 시간이 절약된다.

단점

  • 연산 결과가 주로 Operand1에 저장되므로 원래 Operand1에 있던 자료는 파괴된다.
  • 전체 프로그램의 길이가 길어진다.

1주소 명령어

  • Operand가 한 개로 구성된 명령어 형식
  • AC를 이용하여 명령어를 처리하므로 결과도 누산기에 저장된다.

0주소 명령어

  • Operand부 없이 OPCode만으로 구성
  • 모든 연산은 Stack 메모리의 Stack Pointer가 가리키는 Operand를 이용하여 수행
  • 스택 머신
  • 인스트럭션 수행시간이 짧다.
  • 기억공간 이용이 효율적
  • 수식을 계산하기 위해선 Postfix 형태로 변경해야한다.
  • 연산 결과를 다시 스택에 넣기 때문에 원래의 자료가 남지 않는다.

주소지정방식

고려사항

  • 표현의 효율성 : 빠르게 접근가능하고, 주소지정에 적은 비트를 사용해야하며 다양항 Address 모드를 사용할 수 있어야한다.
  • 사용의 편리성 : 프로그램 작업을 위해 포인터, 프로그램 리로케이션 등의 편의를 제공해야한다.
  • 주소공간과 기억공간의 독립성 : 프로그램에서 사용한 주소를 변경 없이 실제 기억공간 내의 주소로 재배치할 수 있도록 서로 독립적이여야한다.
    • 주소공간 : 보조기억장치 내의 기억공간
    • 기억공간 : 주기억장치 내의 기억공간

암시적 주소지정방식

  • 명령 실행에 필요한 데이터의 위치를 지정하지 않고 누산기나 스택의 데이터를 묵시적으로 지정하여 사용
  • 오퍼랜드가 없는 명령이나 오퍼랜드가 1개인 명령어 형식에 사용

즉시적 주소지정방식

  • 명령어 자체에 오퍼랜드를 가지고 있는 방식
  • 별도의 기억장소를 액세스하지 않기 때문에 실행 속도가 빠르다.
  • 데이터 값 범위가 제한적이다.

직접 주소지정방식

  • 오퍼렌드부에 표현된 주소를 이용해 실제 데이터가 기억된 기억장소에 직접 매핑
  • 실제 사용할 데이터의 유효주소를 적기 때문에 주소 길이에 제약을 받음
  • nBit 오퍼랜드부 => 2^n 개의 주소 표현 가능
  • 오퍼렌드부에 데이터를 가지고 있는 레지스터의 번호를 지정하면 레지스터 모드

간접 주소지정방식

  • 주기억장치를 두 번 이상 접근하여 데이터가 있는 기억장소에 도달
  • 오퍼랜드부에 할당된 비트 수로 주소를 나타낼 수 없을 때 사용하는 방식
  • 명령어의 길이가 짧고 제한되어도 긴 주소에 접근이 가능한 방식
  • 레지스터 간접모드

계산에 의한 주소지정방식

  • 오퍼랜드부와 CPU의 특정 레지스터 값이 더해져서 유효주소를 계산하는 방식
  • 약식 주소
  • 상대주소 : 명령어 주소 + PC
  • 베이스 레지스터 : 명령어 주소 + Base Register
    • 명령어의 시작주소를 가지고 있는 레지스터
    • 베이스 레지스터의 값과 명령어에 포함된 변위값을 더해 유효주소를 얻는 것을 재배치라고 한다.
  • 인덱스 레지스터 : 명령어 주소 + Index Register

마이크로 오퍼레이션

  • 인스트럭션을 수행하기 위해 CPU 내의 레지스터와 플래그가 의미있는 상태변환을 하도록하는 동작
  • 레지스터에 저장된 데이터에 의해 이루어진다.
  • 한 개의 클록펄스 동안 실행되는 기본 동작
  • 모든 마이크로 오퍼레이션은 CPU의 클록펄스에 맞춰 실행된다.
  • 순서를 결정하기 위해 제어장치가 발생하는 신호를 제어신호
  • 제어워드 : 레지스어틔 선택과 산술논리연산장치의 역할을 결정하고 어떤 마이크로 연산을 할 지 결정하는 비트의 모임 = 마이크로 명령어
  • 마이크로 프로그램 : 제어워드가 저장되 있을 때 마이크로 프로그램

마이크로 사이클 타임

  • 한 개의 마이크로 오퍼레이션을 수행하는데 걸리는 시간
  • CPU는 클록펄스에 의해 동기화되어 동작하는데 펄스를 CPU 클록이라하며 한 개의 마이크로 오퍼레이션은 CPU 클록 발생 주기의 간격 내에 실행된다.
  • CPU Cycle Time = CPU Clock Time
  • CPU 속도를 나타내는 척도
  • 1us = 10^-6s, 1ns = 10^-9s

동기 고정식

  • 모든 마이크로 오퍼레이션 동작시간이 같다고 가정해 클록 주기를 마이크로 사이클 타임과 같도록 정의하는 방식
  • 동작 시간이 가장 긴 마이크로 오퍼레이션의 동작시간을 마이크로 사이클 타임으로 정한다.
  • 모든 마이크로 오퍼레이션 동작시간이 비슷할 때 유리하다.
  • CPU 낭비가 심하다.
  • 구현이 쉽다.

동기 가변식

  • 수행시간이 유사한 마이크로 오퍼레이션끼리 그룹을 만들어 그룹별로 서로 다른 마이크로 사이클 타임을 정의하는 방식
  • 수행시간이 현저한 차이를 나타낼 때 사용
  • CPU 시간 낭비를 줄일 수 있다.
  • 구현이 복잡하다.
  • 각 그룹(집합) 간 서로 다른 사이클 타임의 동기를 맞추기 위해 그룹간 마이크로 사이클 타임을 정수배가 되게 한다.

비동기식

  • 모든 마이크로 오퍼레이션이 서로 다른 마이크로 사이클 타임을 가진다.
  • 시간 낭비는 없다.
  • 구현이 매우 복잡하다.
  • 실제로 거의 사용되지 않는다.

메이저 스테이트

  • 현재 CPU가 무엇을 하고 있는가를 나타내는 상태
  • Fetch, Indirect, Execute, Interrupt
  • Major Cycle = Machine Cycle
  • 메이저 스테이트 레지스터를 통해 알 수 있다.
  • F와 R 플립플롭의 상태에 따라 메이저 스테이트 상태가 결정된다.

Fetch Cycle

  • 인출단계
  • 중앙처리장치의 명령 레지스터로 명령어를 가져와 해독하는 단계
  • 가장 먼저 수행되는 동작
  • 1Cycle 명령어면 수행 후 다시 Fetch Cycle로 변경됨
  • 1Cycle 명령어가 아니면 모드 비트에 따라 직 간접 주소를 판단
  • 모드가 0이면 직접주소 => Execute 단계로
  • 모드가 1이면 간접주소 => Indirect 단계로
Click PulseMicro OperationDescription
C0t0MAR ← PCPC의 번지를 MAR으로 전송
C0t1MBR ← M[MAR]
PC ← PC +1
MAR의 지정하는 위치의 값을 MBR에 전송
다음 시행할 명령 위치를 지정
C0t2IR ← MBR[OP]
I ← MBR[I]
명령어의 OPCode를 명령 레지스터에 전송
명령어의 모드 비트를 플립플롭 I에 전송
C0t3F ← 1 OR R ← 1I에 따라 F나 R에 1 전송
  • PC : 다음 실행할 명령의 주소가 들어있음
  • MAR : 저장하거나 읽어올 주기억장치의 주소가 들어있음
  • MBR : 주기억장치에서 읽어오거나 저장할 데이터가 들어있음
  • M[MAR] : 메모리에서 MAR에 해당하는 실제 데이터
  • IR : 현재 실행하는 명령어가 들어있음
  • OP : 명령 코드 부분
  • I : 모드 비트
  • AD : 명령 주소 부분
  • F, R : 다음 상태를 지정하는 플립플롭

Indirect Cycle

  • Fetch 단계에서 해석한 주소를 읽어온 후 간접주소이면 유효주소를 계산하기 위해 다시 Indirect 단계를 수행
  • 직접주소인 경우 Execute 단계 또는 Fetch 단계로 이동
    • 분기같은 1Cycle 명령이면 Fetch로
    • 실행이면 Execute로
Click PulseMicro OperationDescription
C1t0MAR ← MBR[AD]MBR에 있는 명령어의 주소를 MAR에 전송
C1t1MBR ← M[MAR]MAR이 지정하는 메모리의 실제 데이터를 MBR에 전송
C1t2-동작없음
C1t3F ← 1, R ← 0Execute 단계로 이동

Execute Cycle

  • 해석된 명령을 실행하는 단계
  • 플래그 레지스터의 상태를 검사하여 Interrupt 단계로 갈지 결정
Click PulseMicro OperationDescription
C2t0MAR ← MBR[AD]MBR에 있는 명령어의 주소를 MAR에 전송
C2t1MBR ← M[MAR]MAR이 지정하는 메모리의 실제 데이터를 MBR에 전송
C2t2AC ← AC + MBR누산기에 값과 MBR의 값을 더해 ADD 연산 실행
C2t3F ← 0 OR R ← 1F = 0이면 Fetch로, R = 1이면 Interrupt로

Interrupt Cycle

  • 인터럽트 발생시 복귀주소를 저장시키고 인터럽트 처리 프로그램의 첫 번째 명령으로 제어순서를 옮긴다.
  • 인터럽트 단계는 항상 Fetch 단계로 이동된다.
  • 메모리의 인터럽트 주소는 0번지에 저장되고, 인터럽트 벡터는 인터럽트 처리 프로그램의 주소 번지를 말한다.
  • 현재 상태를 저장하고 인터럽트가 처리된다.
  • 인터럽트 처리시 다음 실행주소를 PC에 넣고 인터럽트 벡터로 이동한다.
Click PulseMicro OperationDescription
C3t0MBR[AD] ← PC
PC ← 0
다음 실행 명령 주소를 MBR의 주소로 전송
복귀주소를 저장할 0번지를 PC에 전송
C3t1MAR ← PC
PC ← PC + 1
PC가 가진 0값 번지를 MAR에 전송
인터럽트 벡터 위치를 지정하기 위해 PC 값을 1로 세팅
C3t2M[MAR] ← MBR
IEN ← 0
MBR에 있는 다음 실행 명령 주소를 0번지에 저장
다른 인터럽트가 발생하지 않게 IEN에 0 전송
C3t3F ← 0, R ← 0항상 Fetch로

주요 마이크로 오퍼레이션

AND

  • AC와 메모리의 내용을 AND 연산해서 AC에 저장
  • 논리곱 연산
  • AC ← AC ∧ MBR

ADD

  • AC와 메모리의 내용을 더해서 AC에 저장
  • AC ← AC +MBR

LDA

  • 메모리의 내용을 AC로 Load하는 명령
  • AC에 0을 전송하여 AC를 초기화하는 부분이 있어야함
  • AC ← 0
  • AC ← AC + MBR

STA

  • AC의 내용을 메모리에 저장
  • M[MAR] ← MBR

BUN

  • 실행 명령의 위치를 변경하는 무조건 분기
  • Branch UNconditionally
  • PC ← MBR[AD]

BSA

  • 복귀주소를 저장하고 부 프로그램을 호출하는 명령
  • Branch and Save Return Address
Click PulseMicro OperationDescription
C2t0MAR ← MBR[AD]
MBR[AD] ← PC
PC ← MBR[AD]
복귀주소를 MAR에 전송
PC의 값을 MBR의 주소로 전송
부프로그램 호출직전 MBR의 주소를 PC로 전송
C2t1M[MAR] ← MBR[AD]부프로그램 호출직전 복귀주소 저장
C2t2PC ← PC + 1부 프로그램 시작
C2t3F ← 0 OR R ← 1Fetch 또는 Interrupt

ISZ

  • 메모리의 값을 읽고 값을 1 증가 시킨 후 그 값이 0이면 현재 명령을 건너 뛰고 다음으로 이동
  • IF(MBR=0) THEN ← PC + 1

제어기

제어데이터

  • 제어장치가 제어신호를 발생하기 위한 자료
  • CPU가 특정한 메이저 상태와 타이밍 상태에 있을 때 제어 자료에 따른 제어 규칙에 의해 발생한다.

종류

  • 메이저 스테이트 사이의 변천을 제어하는 데이터
  • 중앙처리장치의 제어점을 제어하는 데이터
  • 인스트럭션의 수행 순서를 결정하는데 필요한 제어데이터

단계

구분State간 변이제어점 제어수행 순서제어
Fetch명령어의 주소지정방식명령어PC
Indirect주소지정방식유효주소-
Execute인터럽트 요청명령어 연산자PC
Interrupt-Interrupt따라 다름Interrupt따라 다름

구현

  • 하드웨어적 고정배선제어장치
  • 소프트웨어적 마이크로 프로그래밍 기법

고정배선 제어장치

  • 독립 제어점에 제어신호를 가해야 할 조건들을 제어 데이터와 제어기의 상태로 표현한 후 이를 만족하는 조합논리회로를 설계하여 해당 제어점에 연결하는 방식
  • 하드웨어적 구성방법
  • 속도 빠름
  • 비싸다.
  • RISC구조를 기본으로 하는 컴퓨터에서 주로 사용
  • 한 번 만들어진 명령어 세트를 변경할 수 없음
  • 회로 구성이 복잡

마이크로 프로그래밍

  • 내부 제어 신호를 지정하는 여러가지 마이크로 인스트럭션으로 작성하는 것
  • 소프트웨어적 구성방법
  • 펌웨어를 이용하는 방식
  • 마이크로 프로그램된 제어장치를 사용하는 컴퓨터는 주 메모리 외에 마이크로 프로그램이 저장되는 제어메모리(ROM)이 필요하다.
  • 명령어 세트를 쉽게 변경할 수 있다.
  • 다양한 어드레스 모드를 갖음
  • 속도 느림
  • 유지보수 및 수정 용이
  • 복잡한 명령 세트를 가진 시스템에 적합

제어 메모리 번지 결정

  • 제어 주소 레지스터(CAR) : 값을 1 증가
    • 매핑의 결과값
    • 주소 필드
    • 서브루틴 레지스터 데이터
  • 명령 레지스터(IR) : 지정하는 번지로 무조건 분기, 주소 필드로부터 제어 메모리의 주소로 매핑
  • 상태 레지스터(SR) : 조건에 따른 분기
  • 서브루틴의 호출(call)과 복귀(return)

형식

수평 마이크로 명령

  • Horizontal Micro Instruction
  • 한 비트가 한 개의 마이크로 동작을 관할하는 명령
  • 마이크로 오퍼레이션 부가 nBit일 때 n개의 마이크로 동작 표현 가능
  • 제어 비트를 디코딩 할 필요가 없다.
  • 마이크로 명령 한 개로 여러 개의 하드웨어를 동시에 동작시킬 수 있다.
  • 제어 워드의 길이가 길어진다.
  • 비트가 충분히 활용되지 못함.
  • 비용이 많이 든다.

수직 마이크로 명령

  • Vertical Micro Instruction
  • 제어 메모리 외부에서 디코딩 회로를 필요로 하는 마이크로 명령
  • 디코더의 출력을 제어신호로 사용
  • 한 개의 마이크로 동작만 제어 가능

나노 명령

  • Nano Instruction
  • 나노메모리(낮은 레벨의 메모리)에 저장된 마이크로 명령
  • 수직 마이크로 명령을 수행하는 제어기에서 디코더를 ROM(나노메모리)로 바꿔 두 메모리 레벨로 구성
  • 제어 메모리의 각 워드는 나노 메모리의 번지를 저장

제어장치 구현방식

  • 상태 플리플롭 제어
  • PLA (Programmable Logic Array)
  • 마이크로 프로그램 제어

입출력장치

입출력 제어장치

  • 입출력장치와 컴퓨터 사이의 자료 전송을 제어하는 장치
  • 데이터 버퍼 레지스터를 이용하여 두 장치간의 속도 차를 조절 = 데이터 버퍼링
  • 제어 신호의 논리적, 물리적 변환 및 오류를 제어
  • DMA, 채널, 입출력 프로세서, 입출력 컴퓨터가 포함된다.

입출력 인터페이스

  • 동작방식이나 데이터 형식이 다른 컴퓨터 내부의 장치끼리 2진 데이터를 원활하게 전송하기 위함
  • CPU와 주변장치의 전송속도, 동작방식, 워드형식의 차이 제어
  • 동작방식이 다른 주변장치끼리의 차이 제어

입출력 버스

  • 주기억장치와 입출력장치 사이의 데이터 전송을 위해 모든 주변장치의 인터페이스에 공통으로 연결된 버스
  • 구성
    • 데이터 버스
    • 주소 버스
    • 제어 버스

기억장치와 입출력장치의 차이

  • 기억장치 : 전자적, 빠르다, 타율, 오류 적음, Word단위
  • 입출력장치 : 기계적, 느리다, 자타율, 오류 많음, Byte(문자)단위

비동기 데이터 전송

  • 비동기 데이터 전송을 하기 위해선 데이터 전송시각을 알기 위한 제어신호를 서로 교환하여 송수신 상태를 서로 맞춰야한다.

스트로브 펄스

  • Strobe Pulse
  • 데이터 버스와 한 개의 제어선
  • 스트로브 신호 : 두 개의 독립적인 장치 사이의 비동기적인 데이터 전송을 하기 위해 전송 시각을 알리는 제어 신호
  • 메모리와 CPU 사이의 정보를 교환할 때 사용
  • 수신장치가 데이터를 받았는지는 모름

핸드쉐이킹

  • 데이터 전송시 송신측과 수신측에서 입출력의 준비나 완료를 나타내는 신호를 사용하여 서로의 동작을 확인하면서 데이터를 전송
  • 전송을 시작한 장치에 응답하는 제 2의 제어신호를 전송
  • 높은 융통성과 신뢰성
  • 병렬 입출력 데이터 전송방식의 기본으로 많이 사용
  • 2~3개의 제어선 사용
  • RDY, STB 신호 사용

스풀링

  • 다중 프로그래밍 환경 아래에서 용량이 크고 신속한 액세스가 가능한 디스크를 이용해 각 사용자 프로그램이 입출력할 데이터를 직접 입출력장치로 보내지 않고 디스크에 모았다가 한꺼번에 입출력 시키는 방법
  • 입출력장치의 공유 및 느린 처리속도를 보완
  • 디스크의 일부를 매우 큰 버퍼로 사용한다.
  • 큐 방식의 입출력을 수행
  • Simultaneous Peripheral Operation OnLine
  • 보조기억장치에 저장
  • 다중 작업
  • 소프트웨어 구현

버퍼링

  • 입출력 장치와 CPU의 속도차를 해결하기 위해 사용
  • 주기억 장치에 저장
  • 단일 작업
  • 하드웨어 구현

입출력 제어방식

  • 입출력 처리 능력 순서 : 프로그램 < 인터럽트 < DMA < 채널

Programmed I/O

  • 폴링
  • 원하는 I/O가 완료되었는지 여부를 검사하기 위해 CPU의 Status Flag를 계속 조사해 I/O가 완료되었으면 MDR(MBR)과 AC사이의 자료 전송도 CPU가 직접 처리하는 방식
  • 입출력의 대부분을 CPU가 해준다.
  • MDR(MBR), Flag(PSW), 장치번호 디코더로 구성
  • CPU가 계속 I/O에 관여해야되기 때문에 비효율적

Interrupt I/O

  • 데이터 전송 준비가 되면 입출력 인터페이스가 컴퓨터에게 알려 I/O가 이루어지는 방식
  • 입출력 인터페이스가 CPU에게 인터럽트 신호를 전송
  • 수행중인 프로그램의 인스트럭션을 끝내고 I/O 처리후 다시 복귀
  • 대량 자료 전송시 CPU에 부담

DMA I/O

  • Direct Memory Access
  • 입출력장치가 직접 주기억장치를 접근하여 데이터 블록을 입출력하는 방식
  • I/O가 CPU를 경유하지 않음
  • CPU는 I/O에 필요한 정보를 DMA 제어기에 전달해 I/O동작만을 개시하고 끝
    • I/O 장치의 주소
    • 데이터 있는 주기억장치의 시작 주소
    • DMA 시작 명령
    • I/O 데이터 양
    • 입력 또는 출력을 결정하는 명령
  • 빠른 데이터 전송 가능
  • DMA는 인터럽트 신호를 발생해 CPU에게 I/O 종료를 알림
  • 블록으로 대용량 데이터 전송 가능
  • CPU의 Cycle Steal 해 메모리를 접근하여 I/O 데이터를 전송
    • 데이터 채널과 CPU가 주기억장치를 동시에 접근할 때 우선순위를 전자에게 줌
    • CPU는 그동안 메모리 참조가 필요없는 오퍼레이션을 계속 진행
    • CPU의 상태 보존이 필요 없음
  • CPU와 DMA 제어기는 메모리와 버스를 공유
  • 명령 받고 => 버스 사용 요구 => 버스 사용 허가 => 데이터 전송 => 인터럽트 전송
  • 한 개의 인스트럭션에 의해 한 개의 블록을 입출력

구성

  • 인터페이스 회로
  • 주소 레지스터 및 주소 라인
  • 워드 카운트 레지스터 = 단어 계수기
  • 제어 레지스터
  • 데이터 레지스터

Channel I/O

  • I/O 프로세서
  • I/O를 위한 특별한 명령어를 I/O 프로세서에게 수행토록 하여 CPU 관여 없이 주기억장치와 입출력장치 사이에서 I/O를 하는 전용 프로세서
  • DMA의 한계를 극복하기 위해 고안
  • DMA의 방법으로 입출력을 수행하지만 확장된 개념
  • 채널 제어기는 채널 명령어로 작성된 채널 프로그램을 해독하고 실행하여 I/O 처리
  • CPU로 I/O 명령어를 받으면 CPU와는 독립적으로 동작
  • 주기억장치에 저장된 채널 프로그램의 수행과 데이터 전송을 위해 주기억장치에 직접 접근
  • I/O 장치는 제어장치를 통해 채널과 연결
  • I/O 채널은 CPU의 I/O 명령을 수행하지 않고 I/O 채널 내의 특별한 명령어를 수행
  • CPU와는 인터럽트로 통신
  • 한 개의 인스트럭션에 의해 여러 개의 블록을 입출력
  • 입출력장치와 주기억장치를 연결하는 중개자
  • 입출력 전담장치
  • 입출력 장치와 CPU사이의 존재하는 현저한 속도차를 극복하기 위한 장치
  • CPU의 명령을 받고 입출력을 시작하면 CPU와는 독립적으로 조작하는 장치

채널 명령어

  • 명령코드
  • 데이터 주소
  • 플래그
  • 워드 카운터

종류

  • Selector Channel
    • 선택 채널
    • 고속 입출력장치(자기로 시작하는 친구들)와 입출력하기 위해 사용
    • 특정 한 개의 장치를 독점해서 입출력
  • MultiPlexer Channel
    • 다중채널
    • 저속 입출력장치(카드리터, 프린터)를 제어하는 채널
    • 동시에 여러 개의 입출력장치 제어
  • Block Multiplexer Channel
    • 고속 입출력장치를 제어
    • 동시에 여러 개의 입출력장치 제어

인터럽트

  • 프로그램 실행 도중 예기치 않은 상황이 발생하는 경우 현재 작업을 즉시 중단하고 발생된 상황을 우선 처리 후 실행 중인 작업으로 복귀
  • 내부 인터럽트는 CPU의 하드웨어 신호에 의해 발생
  • 소프트웨어 인터럽트는 명령어의 수행에 의해 발생

외부 인터럽트

  • 입출력장치, 타이밍장치, 전원 등 외부 요인에 의해 발생
  • 전원 이상 인터럽트 : 정전이거나 정원이상
  • 기게 착오 인터럽트 : CPU의 기능적인 오류 동작 발생
  • 외부 신호 인터럽트
    • Time Slice 를 알림
    • 인터럽트 키를 누른 경우 (Ctrl + Alt + Del)
    • 외부 장치로부터 인터럽트 요청이 있는 경우
  • 입출력 인터럽트
    • 입출력 데이터의 오류나 이상현상 발생
    • 입출력장치가 데이터 전송을 요구하거나 전송이 끝났을 때

내부 인터럽트

  • 잘못된 명령이나 데이터를 사용할 때 발생
  • 트랩
  • 프로그램 검사 인터럽트
    • 0으로 나누기
    • 오버플로 또는 언더플로
    • 프로그램에서 명령어 잘못 사용
    • 부당한 기억장소의 참조
    • 프로그램상 오류

소프트웨어 인터럽트

  • 프로그램 처리중 명령의 요청에 의해 발생
  • SVC 인터럽트
    • 제어 프로그램 호출 인터럽트 = SuperVisor Call
    • 사용자가 SVC 명령을 써서 의도적으로 호출한 경우
    • 복잡한 입출력 처리를 해야하는 경우
    • 기억장치 할당 및 오퍼레이터와 대화를 해야하는 경우

인터럽트시 CPU확인 요소

  • 프로그램 카운터 내용
  • 사용한 모든 레지스터의 내용
  • 상태 조건의 내용 = PSW = Status Register

동작 원리

  1. 인터럽트 요청 신호 발생
  2. 현재 인스트럭션까지 실행 후 프로그램 실행 중단
  3. 현재 프로그램 상태 보존
  4. 인터럽트 처리 루틴 실행
  5. 인터럽트 서비스(취급) 루틴 실행
  • 처리기 상태 복구
  • 인터럽트 원인 결정
  • 처리기 레지스터의 상태 보존
  • 상대적으로 낮은 레벨의 마스크 레지스터 클리어
  1. 상태 복구
  2. 중단된 프로그램 실행 재개

인터럽트 우선순위

  1. 전원 이상 = Power Fail
  2. 기계 착오 = Machine Check
  3. 외부 신호 = External
  4. 입출력 = I/O
  5. 명령어 잘못
  6. 프로그램 = Program Check
  7. SVC = Supervisor Call
  • Non Maskable Interrupt : 마스크 불가능 인터럽트로 0순위

폴링

  • 소프트웨어적 인터럽트 우선순위 판별 방식
  • 우선순위가 높은 인터럽트 자원의 인터럽트 요청 플래그를 검사해 해당하는 인터럽트 서비스 루틴을 수행
  • 우선순위 변경이 쉽다.
  • 자기디스크와 같이 속도가 빠른 장치에 높은 등급 부여
  • 회로가 간단하고 융통성이 있음
  • 별도의 하드웨어가 필요 없어 경제적
  • 많은 인터럽트가 있을 때 모두 조사해야하므로 반응시간이 느림

벡터 인터럽트

  • 하드웨어적인 인터럽트 판별 방식
  • CPU와 인터럽트를 요청할 수 있는 장치 사이에 장치 번호에 해당하는 버스를 연결하여 요청 장치의 번호를 CPU에게 알리는 방식
  • 인터럽트를 발생한 장치가 프로세서에게 분기할 곳에 대한 정보를 제공
  • 인터럽트 벡터 : 인터럽트 처리 루틴으로 분기하는 명령어만을 기억하는 기억장치의 특정 영역으로 분기번지가 저장됨
  • 별도의 프로그램 루틴이 없어 응답속도가 빠름
  • 회로가 복잡하고 융통성이 없음
  • 추가 하드웨어가 필요하므로 비경제적

직렬 우선순위

  • 데이지 체인 방식
  • 모든 장치를 한 개의 회선에 직렬로 연결

병렬 우선순위

  • 인터럽트가 발생하는 각 장치를 개별적인 회선으로 연결
  • 각 비트를 개별적으로 세트할 수 있는 Mask Register 사용
  • 마스크 레지스터는 인터럽트 요청의 허락이 가능하다.
  • 우선순위는 마스크 레지스터의 비트 위치에 의해서 결정
  • 우선순위가 높은 것이 서비스 받고 있을 때 우선순위가 낮은 것을 비활성화시킬 수 있다.
  • 높은 우선순위의 인터럽트는 낮은 인터럽트가 처리되는 중에도 우선 처리된다.

기억장치

  • 주기억장치 : 시스템 프로그램영역과 사용자 프로그램영역으로 구성
    • 반도체 : RAM, ROM
    • 자기 : 자기 코어
  • 보조기억장치
    • DASD : 자기 디스크, 자기 드럼, 하드 디스크, 광디스크
    • SASD : 자기테이프
  • 특수기억장치 : 복수 모듈 기억장치, 연관기억장치, 캐시기억장치, 가상기억장치
  • 광디스크의 종류 : 블루레이, DVD, Compact

계층구조

  • 특수기억장치 : 레지스터, 캐시, 연관
  • 주기억장치 : RAM, ROM, 자기코어
  • 보조기억장치 : 자기디스크, 자기테이프

특성 결정 요소

기억 용량

Access Time

  • 기억장치에 읽기 요청이 발생한 시간부터 요구한 정보를 꺼내서 사용 가능할 때까지의 시간
  • 한 Word의 단위 정보를 읽거나 기록하는데 걸리는 시간
  • Access Time = Seek Time + Latency Time(Search Time) + Transmission Time

Cycle Time

  • 기억장치에 읽기 신호를 보낸 후 다시 읽기 신호를 보낼 수 있을 때까지의 시간 간격
  • Cycle Time ≥ Access Time
  • DRAM : Cycle Time = Access Time + Refresh Time
  • 자기코어 : Cycle Time = Access Time + Restoration Time
  • 기타 모든 장치 : Cycle Time = Access Time

Bandwitdh

  • 대역폭 = 전송률 = 밴드폭
  • 메모리에서 또는 메모리까지 1초동안 전송되는 최대한의 정보량
  • 기억장치의 자료 처리 속도를 나타내는 단위
  • 하드웨어 특성상 주기억장치가 제공할 수 있는 정보 전달능력의 한계를 의미
  • 메모리 워드의 길이가 작을수록 대역폭이 좋음
  • 전송단위 : bps = Baud = 보

구분

구분방식내용
내용보존여부파괴성 메모리 : 읽으면 내용이 파괴되므로 재저장시간이 필요
비파괴성 메모리
전원차단시
내용소멸여부
휘발성메모리 : RAM
비휘발성 메모리 : ROM, 자기코어, 보조기억장치
재충전 여부정적메모리(SRAM) : 전원이 공급되면 내용이 계속 유지
전원이 공급되도 일정시간 후 내용 지워져 재충전필요
접근 방식순차접근 : 자기테이프
직접접근 : 자기테이프 제외 모든장치

주기억장치

ROM

  • Read Only Memory
  • 읽기전용
  • 비휘발성 메모리
  • BIOS, 자가진단프로그램 등 변경 가능성이 거의 없는 시스템 소프트웨어 탑재

종류

  • Mask ROM : 제조 공장에서 프로그램되어 나옴, 내용 변경 불가
  • PROM : Programmable ROM, 한 번만 쓰기 가능
  • EPROM : Erasable PROM, 자외선을 사용해 내용을 지울 수 있음
  • EAROM : Erasable Alterable ROM, 전기적 특성을 이용하여 기록된 정보 일부를 바꿀 수 있는 ROM
  • EEPROM : Electonic EPROM, 전기를 이용해 내용 수정 가능

RAM

  • Random Access Memory, Read Write Memory
  • 현재 사용중인 프로그램이나 데이터가 저장
  • 휘발성 메모리 = Volatile Memory
  • 정보가 저장된 위치는 주소로 구분
구분동적 램정적 램
구성콘덴서플리플롭
특징방전되므로주기적인 재충전전원 공급시에 계속 유지
소모전력적음많음
속도느림빠름
집적도높음낮음
가격저가고가
용도일반적캐시메모리

자기 코어

  • 전류 일치 기술에 의하여 기억장소를 선별
  • 데이터를 읽으면 내용이 지워지는 파괴 메모리
  • Dectructive Read Out Memory
  • 내용을 읽은 후 지워진 내용을 기록하기 위한 재저장 시간 필요
  • 현재 거의 사용되지 않음

구성

  • 구동선 : X,Y축 번지 선택선 2개
  • 센스선 : 자기 코어의 상태를 검출하는 선 1개
  • 금지선 : 불필요하게 자화되었을 때 금지 전류를 흘려 자화를 소진시키는 선 1개

반도체 기억소자 구성

RAM

  • CS1, CS2 : 칩 선택선
  • RD : 입력 신호선
  • WR : 출력 신호선
  • AD : 주소선
    • MAR과 PC의 수와 같음
    • 주소선이 n개이면 2^n개의 워드 지정 가능
  • Data Bus : 워드의 크기
    • MBR = IR = 단어의 크기
    • 버스가 10Bit이면 워드의 크기가 10Bit

ROM

  • CS1, CS2 : 칩 선택선
  • AD : 주소선
  • Data Bus : 워드의 크기

보조기억장치

  • 주기억 장치의 단점 보완
  • 속도는 느리지만 전원이 차단되도 내용 유지
  • 저장용량이 큼
  • CPU와 직접 자료교환이 불가능
  • 주기억장치에 데이터를 저장할 때 DMA를 사용

자기 테이프

  • 순차처리 = SASD
  • 블록단위로 데이터를 전송
  • 블록 사이에는 데이터를 기록할 수 없는 공간인 이 있다.
  • BOT : Beginning Of Tape
  • EOT : End Of Tape
  • BPI : Byte Per Inch, 1인치에 기억할 수 있는 바이트 수
  • IRG : Inter Record Gap, 레코드와 레코드 사이의 갭
  • IBG : Inter Block Gap, 블록과 블록 사이의 갭
  • Block : 한 개 이상의 논리 레코드의 집합 = 물리 레코드
  • 블로킹 : 한 개 이상의 논리적 레코드를 묶어서 테이프에 기록하는 방식
    • IRG가 줄어든다.
    • 기억공간 낭비 감소
    • Access Time 감소
    • 입출력 횟수 감소
  • Blocking Factor : 하나의 블록을 구성하는 논리 레코드의 갯수

자기 디스크

  • DASD
  • 회전축에 여러장의 디스크를 연결하고, 디스크 상하면마다 R/W Head를 액세스암에 연결하여 구성
  • 가장 윗면과 가장 아랫면은 사용하지 않는다.
  • 트랙 : 디스크 표면에서 회전푹을 중심으로 데이터가 기록되는 동심원
  • 섹터 : 트랙들을 일정한 크기로 구분한 부분이며 정보 기록의 기본 단위
  • 실린더 : 서로 다른 면들에 있는 동일 위치의 트랙들의 모임
  • Random Access와 Sequential Access 방식을 모두 사용

디스크의 3요소

  • 디스크
  • 액세스암
  • 헤드

Access Time

  • Access Time = Seek Time + Latency Time + Transmission Time
  • Seek Time : 탐색시간으로 R/W Head가 특정 트랙까지 이동하는데 걸리는 시간
  • Latency Time : R/W Head가 특정 트랙까지 이동한 후 디스크가 회전하여 트랙에 포함되어 있는 특정 섹터가 R/W Head까지 도달하는데 걸리는 시간
    • Search Time = Rotational Delay Time
  • Transmission Time : 전송시간으로 R/W Head가 액세스한 섹터와 주기억장치 간의 자료전송에 걸리는 시간

자기 드럼

  • 각 트랙마다 고정된 R/W Head를 두고 있다.
  • DASD
  • Access Time = Latency Time + Transmission Time

연관기억장치

  • 기억장치에서 기억된 내용의 일부를 이용하여 액세스하는 자료를 찾는 기억장치
  • CAM = Content Addressable Memory = 연상기억장치
  • 정보 검색 빠름
  • 캐시 메모리나 가상 메모리 관리기법에서 사용하는 매핑 테이블에 사용
  • 외부 인자와 내용을 비교하기 위한 병렬 판독 논리회로를 가지고 있음
  • 하드웨어 비용 증가

구조

  • 데이터 레지스터 : 인수 레지스터, 찾고자 하는 내용의 일부를 기억하는 레지스터
  • 키 레지스터 : 마스크 레지스터, 검색에 사용할 비트를 결정하는 레지스터
  • 매치 레지스터 : 일치 지시기, 데이터를 찾은 경우 찾았다고 표시하기 위해 사용

복수모듈기억장치

  • 독자적으로 데이터를 저장할 수 있는 기억장치 모듈을 여러 개 가진 기억장치
  • 주기억장치와 CPU의 속도 차이 문제점을 개선
  • 기억장치의 버스를 시분할하여 사용
  • 각각의 기억장치는 자체 어드레스 레지스터와 버퍼 레지스터를 가지고 독자적으로 데이터를 저장
  • 인터리빙 기법에 의해 기억장치를 구성하는 모듈 수만큼 단어(워드)들에 동시 접근 가능
  • 버스가 많으면 모든 모듈 동시 병렬 접근 가능

메모리 인터리빙

  • Memory Interleaving = 디스크 인터리빙
  • 여러 개의 독립 모듈로 이루어진 복수 모듈 메모리와 CPU 간의 주소 버스가 한 개로만 구성되어 있으면 같은 시각에 CPU로부터 여러 모듈로 동시에 주소를 전달할 수 없다.
  • CPU가 각 모듈로 전송할 주소를 교대로 배치한 후 차례대로 전송하여 여러 모듈을 병행 접근하는 기법
  • 중앙처리장치와 기억장치 사이의 실질적인 대역폭 효율을 높일 수 있다.
  • 캐시 기억장치, 고속 DMA에서 사용
  • CPU 유휴시간 감소

캐시 메모리

  • CPU와 주기억장치의 속도차를 줄이기 위해 사용
  • 고속 Buffer Memory
  • 자주 사용하는 프로그램과 데이터를 기억
  • 메모리 계층에서 가장 빠른 소자
  • 캐시 주소표는 검색 시간을 단축시키기 위해 연관기억장치(CAM)을 사용

설계 고려사항

  • 캐시 크기
  • 전송 블록 크기
  • 교체 알고리즘

매핑 프로세스

주기억장치로부터 캐시 메모리로 데이터를 전송하는 방법

직접 매핑

  • Direct Mapping
  • 주기억장치의 블록들이 지정된 한 개의 캐시 라인으로만 매핑되는 방법
  • 간단하고 구현 비용이 적다
  • 적중률이 낮다

어소시에이티브 매핑

  • Assciative Mapping = 연관 매핑
  • 직접 매핑의 단점 보완
  • 모든 태그를 병렬로 검사하기 때문에 복잡하고 비용이 높음
  • 거의 사용안함

세트-어소시에이티브 매핑

  • 직접 매핑과 연관 매핑의 장점만 취함

쓰기 정책

저장되어 있는 데이터 수정이 발생할 때 수정된 내용을 주기억장치에 갱신하기 위해 시기와 방법을 결정하는 것

  • Wirte-Through : 캐시에 쓰기 동작이 이루어질 때마다 캐시 메모리와 주기억장치의 내용을 동시 갱신
  • Write-Back : 캐시에 쓰기 동작이 이루어지는 동안은 캐시의 내용만이 갱신, 캐시의 내용이 캐시로부터 제거될 때 주기억장치에 복사
  • Write-Once : 캐시에 쓰기 동작이 이루어질 때 한 번만 기록하고 이후의 기록은 모두 무시

적중률

  • 캐시메모리에 접근하는 경우 원하는 정보가 캐시 메모리에 기억되어 있을 때 적중되었다고 함
  • 캐시 기억장치가 있는 컴퓨터의 성능을 나타네내는 척도
  • 적중률 = 적중횟수 / 총 접근 횟수
  • 미스율 = 1 - 적중률

가상기억장치

  • 기억 용량이 작은 주기억장치를 큰 용량을 가진 것처럼 사용할 수 있는 기법
  • 보조기억장치를 이용한 주기억장치의 용량 확보
  • 소프트웨어적 방법으로 구현
  • 프로그램을 여러 블록으로 나눠서 보조기억장치에 보관하고 프로그램 실행시 필요 부분만 주기억장치에 적재
  • 오버레이 문제가 자동적으로 해결
  • 보조기억장치 접근이 빈번하면 시스템 처리 효율이 저하
  • DASD에만 가능

주소

  • 가상주소 : 논리주소로 보조기억장치 상의 주소
  • 실기억주소 : 물리적주소로 주기억장치 상의 주소

관리

  • 페이징 기법 : OS가 보조기억장치에 있는 프로그램을 동일한 크기의 블록으로 나눠서 관리
  • 세그먼트 기법 : 사용자가 보조기억장치에 있는 프로그램을 가변적인 크기의 블록으로 나눠서 관리

관리전략

반입 전략

  • Fetch
  • 보조기억장치에 보관중인 프로그램이나 데이터를 언제 주기억장치로 적재할 것인가?

배치 전략

  • Placement
  • 새로 반입되는 포르개림이나 데이터를 주기억장치 어디에 위치시킬 것인가를 결정
  • 최초, 최적, 최악접합이 있음

교체 전략

  • Replacement
  • 주기억장치의 영역이 이미 사용중인 상태에서 새로운 프로그램을 주기억장치에 배치할 때 어떤 방식을 사용할지 결정하는 전략
  • FIFO, OPT, LRU, NUR, LFU, MFU 등
  • Page Fault 발생시 교체할 페이지를 결정해서 보조기억장치의 이전 위치에 기억시키고 새 페이지를 교체한 페이지의 위치에 놓는 것을 스테이징이라 한다
  • 스테이징 : 느린 장치에서 바른 장치로 옮겨가는 것

주소 매핑

  • 가상주소를 실 기억주소로 변환하는 작업
  • 가상주소 형식 : 페이지 번호와 변위값
  • 실기억주소 형식 : 페이지 프레임과 변위값
  • 페이지 맵 테이블 : 디스크 페이지 번호와 페이지 프레임 번호, 상태 비트

변환 순서

  • 페이지 번호에 해당하는 페이지 프레임 번호와 가상주소의 변위 주소값을 이용해 실 기억주소를 만듦
  • 실기억주소를 이용하여 주기억장치를 액세스

병렬 컴퓨터

  • I/O 채널 또는 프로세서와 같은 다수의 프로세서에서 동시에 여러 프로세스를 처리하는 것
  • 일부 하드웨어 오류가 발생해도 전체 시스템은 동작
  • 처리 속도가 빠름
  • 프로그램 작성이 어려움
  • 기억장치 공유
  • 특수한 업무에 적용 : 예보, 인공지능, 역학계산, 모의실험, 유도탄 등

Flynn의 분류

플린의 분류, 명령 흐름과 자료 흐름을 고려하여 분류

SISD

  • Single Instruction stream Single Data stream
  • 현재 보통 컴퓨터 구조
  • 명령 하나가 자료 하나를 처리
  • 파이프라인에 의한 시간적 병렬 처리 가능

SIMD

  • Single Instruction stream Multi Data Stream
  • 한 개의 명령으로 여러 데이터를 동시에 처리하는 구조
  • 배열 처리기에 의한 동기적 병렬처리가 가능
  • 다수의 처리기가 한 개의 제어장치에 의해 제어

MISD

  • Multi Instruction stream Single Data stream
  • 다수의 처리기에 의해 각각의 명령들이 하나의 데이터를 처리하는 구조
  • 실제로 사용되지 않음
  • 파이프라인에 의한 비동기적 병렬처리 가능

MIMD

  • Multi Instruction stream Multi Data stream
  • 다수의 처리기가 각각 다른 명령 흐름과 자료 흐름을 가지고 여러 개의 자료를 처리하는 구조
  • 각 처리기 사이에에서 상호작용(Interaction)이 일어남
  • 멀티 프로세서에 의한 비동기적 병렬처리 가능
  • Tightly Coupled System = 다중 처리기
  • Loosely Coupled System = 분산 처리 시스템

Feng의 분류

팽은 병렬 수행 정도에 따라 분류

WSBS

  • Word-Serial, Bit-Serial
  • 한 번에 한 비트씩 처리하는 방식 (초기 컴퓨터)

WPBS

  • Word-Parallel, Bit-Serial
  • 단어를 묶어서 그 중 한 개의 비트 슬라이스 단위를 순차적으로 처리

WSBP

  • Word-Sreial, Bit-Parallel
  • 한 번에 한 단어씩 병렬로 처리
  • 현재의 컴퓨터

WPBP

  • Word-Parallel, Bit-Parellel
  • 단어별 병렬, 비트별 병렬 처리

병렬 처리 기법

파이프라인 프로세서

  • CPU 처리속도를 높이기 위해 여러개의 인스트럭션을 동시에 병렬처리하는 장치
  • 시간적 병렬처리
  • 명령인출 => 명령 해독 => 오퍼랜드 인출 => 명령 실행
  • 스칼라 프로세서를 이용하는 기법
  • 파이프라인이 차고 나면 연산속도가 빠르다.
  • 같은 연산이 반복되면 효율적이지만 아니면 구조가 복잡하고 시간이 오래 걸린다.

벡터 프로세서

산술 및 논리연산, 비교, 내적연산, 최대, 최소값 구하기 등 벡터 연산 명령을 효율적으로 수행하도록 구성된 처리기

시스톨릭 프로세서

  • 데이터 흐름과 제어 흐름이 규칙적인 특징을 갖는 시스톨릭 알고리즘을 이용하여 수행하는 처리기
  • 파이프라인화 된 벡터 프로세서와 배열 프로세서의 특징을 결합한 것
  • 초고밀도 직접회로(VLSI) 기법을 이용하여 구현
  • 응용의 한계성과 프로그래밍의 어려움이 있음

배열 프로세서

  • 배열처리기는 PE(Processing Element)라 불리는 다수의 연산기를 갖는 동기적 병렬 처리기
  • 명령 해독 및 제어는 제어장치가 하고, PE들는 명령 해독 능력이 결여된 수동적 장치로 명령처리만 한다.
  • PE를 중복 이용해서 공간적 병렬성을 얻는다.
  • 벡터 계산이나 행렬 계산에 적합

데이터 플로우 컴퓨터

  • 데이터 흐름 컴퓨터는 PC(Program Counter)가 필요 없다.
  • 제어 흐름 컴퓨터와는 반대되는 개념
  • 인스트럭션의 필요한 피연산자가 모두 준비되었을 때 인스트럭션을 수행하고 결과를 필요로하는 인스트럭션에 보내주는 방식

Database 정리

· 50 min read

정보 시스템

필요한 데이터를 수집, 필요시에 처리하는 수단

  • 자료 : 관찰이나 측정을 통해 수집, 가공되지 않은 상태
  • 정보 : 자료를 가공

자료처리시스템

정보시스템의 서브시스템

  • 일괄처리시스템 : 급여, 회계, 세무 등 모아서 처리

  • 온라인실시간처리시스템 : 예약, 은행처리

  • 분산처리시스템

  • 데이터웨어하우스 : 업무 시스템에서 추출 된 데이터 집합체

DB 시스템

개념

  • 통합된데이터 : 중복을 배제한 데이터의 모임 (Integrated)
  • 저장된데이터 : 저장매체에 저장된 자료 (Stored)
  • 운영데이터 : 업무를 수행하는데 반드시 필요한 자료 (Operational), 임시불가
  • 공용데이터 : 공동으로 소유, 유지 하는 자료 (Shared)

특징

  • 실시간접근성 : (Real-Time Accessibility)
  • 계속적인변화 : (Continuous Evolution)
  • 동시공용 : (Concurrent Sharing)
  • 내용에 의한 참조 : 주소나 위치에 의해서가 아니라 사용자가 요구하는 데이터로 검색(Content Reference)

구성요소

  • 데이터베이스
  • 스키마
  • DBMS
  • DB언어
  • DB컴퓨터
  • DB사용자

DBMS

  • DB 관리 소프트웨어
  • 모든 응용 프로그램이 DB 공용하도록 관리
  • DB 구성, 접근방법, 유지관리에 책임

DBMS의 기능

  • 정의(조직)기능 : 데이터 타입과 구조 정의, 이용방식, 제약조건 명시 (Definition)
  • 조작기능 : CRUD를 위해 사용자와 DB사이의 인터페이스 수단을 제공 (Manipulation)
  • 제어기능 : 데이터 무결성, 보안, 권한, 병행제어 처리 (Control)

DBMS의 장단점

  • 단점 : 전문가부족, 비용증가, Overhead, Backup과 Recovery의 어려움, 복잡

파일시스템의 문제점

  • 종속성 : 데이터의 접근방법을 변경하면 응용프로그램도 변경
  • 중복성 : 일관성, 보안성, 경제성, 무결성 위반

데이터독립성

  • 논리적 독립성 : 응용프로그램과 DB를 독립, 논리적 구조를 변경해도 응용프로그램 변경하지 않음
  • 물리적 독립성 : 응용프로그램과 물리적장치 독립, DB에 디스크를 추가해도 응용프로그램 변경하지 않음

DB의 구성요소

  • 개체
  • 속성 : 개체의 성질
  • 관계

데이터사전

  • 모든 데이터 개체들에 대한 정보를 유지 관리
  • alias 시스템 카탈로그
  • 데이터에 관한 데이터

스키마

  • 외부스키마
  • 개념스키마
  • 내부스키마

특징

  • 데이터 사전에 저장
  • alias 메타데이터
  • 데이터의 구조적 특성을 의미
  • 인스턴스에 의해 규정

외부스키마

  • 개인이 필요로하는 DB의 논리적 구조
  • VIEW
  • alias 서브스키마
  • 여러 개 존재 가능
  • 사용자는 SQL을 사용해 접근
  • 응용 프로그래머는 COBOL, C를 사용해 접근

개념스키마

  • DB의 전체적인 논리적 구조
  • 하나만 존재
  • DB 파일에 저장되는 데이터의 형태를 나타냄
  • alias 스키마
  • DBA에 의해 구성

내부스키마

  • 물리적 저장장치에서 본 DB 구조
  • DB에 저장될 레코드의 물리적인 구조 정의
  • 내부 레코드의 물리적 순서를 기술
  • alias 저장스키마
  • 시스템 프로그래머나 시스템 설계자가 봄

DB언어

DDL

  • DB를 구축하거나 수정

DML

  • 비절차적 데이터 언어
  • SQL, IMS, DBTG, TOTAL

DCL

  • 무경설, 보안, 권한, 회복

DB 사용자

DBA

  • DDL, DML, DCL 사용

응용 프로그래머

  • DML을 사용해 일반 사용자에게 응용프로그램 제공

일반사용자

  • SQL 사용

데이터 모델

정보를 단순화, 추상화하여 체계적으로 표현한 개념적 모형

개념적 데이터 모델

  • 추상적인 개념으로 표현
  • 개체와 관계를 통해 현실을 표현
  • ER모델
  • 현실 세계의 개체를 인간이 이해하는 구조로 기술

논리적 데이터 모델

  • 데이터 타입과 데이터 타입간의 관계를 통해 현실을 표현
  • DBMS는 논리적 데이터 모델을 하나만 사용
  • 관계모델, 계층모델, 네트워크모델
  • 현실 세계의 개체를 컴퓨터의 데이터구조로 기술

표시요소

표현요소, 구성요소

  • 구조 : 논리적으로 표현된 개체 타입들 간의 관계로 데이터 구조 및 정적 성질을 표현 (Structure)
  • 연산 : DB에 저장된 실제 데이터를 처리하는 작업에 대한 명세로 DB를 조작하는 기본 도구 (Operation)
  • 제약조건 : 실제 데이터의 논리적인 제약조건 (Constraint)

구성요소

  • 개체 : DB에 표현하려는 것, 유무형의 정보, 서로 연관된 속성, fs의 레코드 (Entity)
  • 속성 : 데이터의 가장 작은 논리적 단위, fs의 데이터항목 또는 데이터 필드, 개체를 구성하는 항목 (Attribute)
  • 관계 : 개체 간 또는 속성 간의 관계 (Relationship)

ER모델

Perter Chen, 개념적 표현

ERD

  • 개체 : □
  • 관계 : ◇
  • 속성 : ○
  • 기본키속성 : 밑줄원 또는 ●
  • 연결 : 선, 링크로 개체와 속성을 연결
  • DB의 논리적 구조 표현

관계형 데이터모델

테이블 (Relation)으로 표현

계층형 데이터모델

트리, 노드 = 개체, 부모 자식 관계

특징

  • 연쇄삭제
  • 개체 간 사이클 허용 안됨
  • 개체 = 세그먼트
  • DBMS = IMS

장점

  • 구조 간단, 판독 용이
  • 구현, 수정, 검색 용이
  • 독립성 보장

단점

  • 데이터 상호 유연성 붖고
  • 검색경로 한정
  • 삽입 삭제 연산 매우 복잡
  • 다 대 다 관계 처리 어려움

망형 데이터모델

CODASTYL DBTG 모델, 그래프, Owner-Member, N:M 관계

DB설계

고려사항

  • 무결성
  • 일관성
  • 회복
  • 보안
  • 효율성
  • DB 확장가능

개념적 설계

  • 개념 스키마 모델링과 트랜젝션 모델링
  • ERD 작성
  • alias 정보 모델링
  • 독립적 개념스키마

논리적 설계

현실세계를 물리적저장장치에 저장할 수 있도록 논리적 자료구조로 변환

  • 트랜잭션 인터페이스 설계
  • 테이블 설계
  • alias 데이터 모델링
  • 종속적 논리스키마

물리적 설계

  • DB file의 저장구조 및 액세스 경로 결정
  • 데이터가 컴퓨터에 저장되는 방법 묘사
  • 저장 레코드 양식 설계
  • 데이터타입
  • 데이터 값의 분포
  • 접근 빈도
  • 레코드 집중의 분석 설계
  • 접근 경로 설계
  • 기본 단위는 저장레코드

고려사항

  • 인덱스 구조
  • 반응시간 : (Response Time)
  • 공간활용도 : (Space Utilization)
  • 트랜잭션 처리량 : (Transaction Throughput)

DB 구현

  • DDL 이용해 스키마 기술
  • 응용 프로그램을 위한 트랜잭션 작성
  • DB 접근을 위한 응용 프로그램 작성

설계 순서

구 분석 > 념적 설계 > 리적 설계 > 리적 설계 >

관계형 DB 구조

테이블로 표현

  • 릴레이션 스키마 : 속성명
  • 릴레이션 인스턴스 : 데이터

튜플

  • row
  • 튜플은 릴레이션을 구성하는 각각의
  • 속성의 모임
  • fs의 레코드
  • 튜플의 수 = 카디널리티 (Cardinality) = 기수 = 대응수

속성

  • column
  • DB를 구성하는 가장 작은 논리적 단위,
  • fs의 데이터 또는 데이터 필드
  • 개체의 특성
  • 속성의 수 = 디그리 (Degree) = 차수

도메인

  • 하나의 속성 값들의 집합

관계형 DB 제약조건

후보키

모든 튜플에 대해 유일성과 최소성 만족

  • 유일성 : 하나의 키값으로 하나의 튜플만 식별 가능
  • 최소성 : 모든 레코드를 유일하게 식별하는데 필요한 속성

기본키

특정 튜플을 유일하게 구별할 수 있는 속성으로 후보키 중 선택한 Main key

  • Null 값 불가

대체키

  • 후보키가 둘 이상일 때 기본키를 제외한 나머지 후보키
  • alias 보조키

슈퍼키

  • 속성들의 집합으로 구성된 키
  • 유일성은 만족, 최소성은 불만족

외래키

  • 기본키를 포함하면 참조 릴레이션
  • 외래키를 포함하면 참조하는 릴레이션

무결성

  • 개체무결성 : 기본키를 구성하는 속성은 NULL이나 중복 불가
  • 참조무결성 : 외래키 값은 NULL이거나 참조 릴레이션의 기본키와 동일, 도메인과 속성 갯수가 같아야함

관계대수

관계형 DB에서 원하는 정보를 얻기 위해 사용하는 절차적인 언어로 연산자와 연산규칙을 제공한다.

  • 순수 관계 연산자 : Select, Project, Join, Division
  • 일반 집합 연산자 : Union, Intersection, Difference, Cartesian Product

순수 관계 연산자

Select

  • 수평연산
  • 시그마(σ)

Project

  • 속성만 추출하는 연산
  • 수직연산
  • 파이(π)

Join

  • 두 개의 릴레이션을 합쳐서 새로운 릴레이션으로 반환
  • 나비넥타이 (▷◁)
  • 자연조인 : 중복된 속성을 제거하여 같은 속성을 한 번만 표기하는 방법

Division

  • 속성을 제외한 속성만을 구하는 연산
  • 나누기 (÷)

일반 집합 연산자

  • 합집합, 교집합, 차집합은 합병 조건이 가능해야함.
  • 합병조건 : 합병하려는 두 릴레이션 간에 속성 수가 같고 도메인의 범위가 같음

합집합

  • Union
  • A ∪ B ≤ A + B
  • 합집합의 카디널리티는 두 릴레이션의 카디널리티의 합보다 크지 않다.

교집합

  • Intersection
  • A ∩ B ≤ MIN(A, B)
  • 교집합의 카디널리티는 두 릴레이션 중 작은 릴레이션보다 크지 않다.

차집합

  • Difference
  • A-B ≤ A
  • 차집합의 카디널리티는 A의 카디널리티보다 크지 않다.

교차곱

  • Cartesian Product
  • (A×B) = (A)×(B)
  • 교차곱은 두 릴레이션의 카디널리티를 곱한 것과 같다.
  • 디그리(차수)는 더하고, 카디널리티(튜플 수)는 곱하면 된다.

관계해석

  • E.F.Codd가 Predicate Calculus에 기반
  • 연산을 표현하는 방법, 원하는 정보를 정의시 계산 수식 사용
  • 비절차적 특성
  • 튜플 관게해석과 도메인 관계해석
  • 질의어로 표현

정규화

잘못 설계된 관계형 스키마를 작은 스키마로 쪼개서 바람직하게 만드는 과정으로 DB의 논리적 설계 단계에서 수행

목적

  • 안정성 최대화
  • 어떠한 릴레이션이라도 DB에서 표현이 가능
  • 효과적인 검색 알고리즘
  • 중복 배제하여 CRUD 이상의 발생 방지
  • 데이터 삽입시 릴레이션 재구성 필요성 제거

Anomaly

속성 간 종속 또는 튜플의 중복으로 발생

  • 삽입이상 : 원하지 않는 값도 같이 삽입
  • 삭제이상 : 연쇄 삭제
  • 갱신이상 : 일부만 갱신

과정

단계
비정규릴레이션
도메인이 원자값
1NF
부분적 함수 종속 제거
2NF
이행적 함수 종속 제거
3NF
결정자이면서 후보키가 아닌 것 제거
BCNF
다치 종속 제거
4NF
조인 종속성 이용
5NF

1NF

원자값으로만 되어있는 릴레이션

2NF

키가 아닌 모든 속성이 기본키에 대해 완전 함수적 종속

  • 함수적 종속관계 : A에 따라 B가 항상 같은 값이 나올 때 (키->값)
  • 완전 함수적 종속관계 : A,B에 따라 C가 항상 같은 값이 나오지만 A-C, B-C에서는 종속이 사라질 때 (여러 키->값)

3NF

키가아닌 모든 속성이 기본키에 대해 이행적 종속관계를 제거

  • 이행적 종속관계 : A->B, B->C일 때 A->C 인 관계

BCNF

릴레이션에서 결정자가 모두 후보키인 관계 (Boyce-Codd Normal Form)

  • 결정자 : A->B 일 때 A를 결정자, B를 종속자
  • 모든 BCNF가 종속성을 보존하는 것은 아니다.

4NF

릴레이션에서 A->->B가 성립할 때 모든 속성이 A에 함수적 종속인 관계

  • 다치종속 : A,C에 대응하는 B값들이 A에만 종속되고 C에는 무관할 때 A->->B

5NF

조인 종속성이 후보키를 통해서만 만족될 때

  • 조인종속 : 어떤 릴레이션이 자신의 pROJECTION에 대한 조인의 결과가 자신과 같을 때

SQL

  • IBM에서 개발한 SEQUEL에서 진화

  • 관계대수와 관계해석을 기초로한 혼합 데이터 언어

  • 정의, 조작, 제어 기능

  • DDL : Create, Alter, Drop

  • DML : Select, Insert, Delete, Update

  • DCL : Commit, Rollback, Grank, Revoke

DDL

  • CREATE SCHEMA|DOMAIN
  • CREATE TABLE 테이블명 PRIMARY UNIQUE FOREIGN KEY REFERENCES CONSTRAINT CHECK
  • CREATE INDEX ON [CLUSTER]
  • ALTER TABLE ADD|ALTER|DROP [CASCADE]
  • DROP SCHEMA|DOMAIN|TABLE|VIEW|INDEX [CASCADE|RESTRICTED]

DML

  • SELECT FROM [WHERE][group by] [HAVING][order by]

DML

  • INSERT INTO VALUES
  • DELETE FROM WHERE
  • UPDATE SET

내장 SQL

컴퓨터 프로그램에 SQL 명령을 삽입한 것

  • 일반 SQL은 여러 개의 튜플을 반환하지만, 내장 SQL은 단 하나의 튜플을 반환
  • 반환되는 튜플은 일반 변수를 사용하여 저장 가능
  • 호스트 변수와 DB 필드명은 같아도 된다.
  • 내장 SQL 앞에 EXEC SQL 사용
  • 호스트 변수는 변수앞에 콜론(:)을 붙임

커서

  • 내장 SQL문의 수행 결과로 복수의 튜플이 반환될 시 액세스 할 수 있게 해준다.
  • 질의 수행 결과로 반환되는 첫 튜플에 대한 포인터

커서 명령어

  • DECLARE : 선언
  • OPEN : 첫번째 튜플 포인트
  • FETCH : 다음 튜플로 포인터 이동
  • CLOSE : 종료

  • 본 테이블로 유도된 가상 테이블
  • 조인 사용 최소화로 사용상의 편의성을 최대화
  • 외부 스키마
  • 물리적으로 구현되어 있지 않음
  • 뷰가 정의된 테이블이나 뷰를 삭제하면 그걸 참조한 다른 뷰도 삭제됨.

장점

  • 논리적 데이터 독립성 제공
  • 보안

단점

  • 독립적인 인덱스 사용 불가
  • 정의 변경 불가
  • CRUD 제한

시스템 카탈로그

  • 시스템에 관련된 다양한 객체가 담긴 시스템 DB
  • alias 자료사전 = data dictionary = 카탈로그 = 데이터사전
  • 메타데이터 : 카탈로그에 저장된 정보
  • SQL을 이용해 내용 검색 가능
  • 수정 및 삽입 불가
  • DB에 따라 다른 구조
  • DBMS가 스스로 생성하고 유지
  • 시스템, 사용자 접근가능

Data Directory

  • 데이터 사전에 있는 데이터를 실제로 접근하는데 필요한 정보를 관리하는 시스템
  • 시스템만 접근가능

트랜잭션

  • DB 상태를 변환시키는 하나의 논리적 기능의 단위
  • 한꺼번에 모두 수행되어야할 연산들
  • 병행 제어 및 회복 작업시 처리되는 작업의 논리적 단위
  • 시스템이 응답하기 위한 상태 변환 과정의 작업 단위

특성

무결성을 보장

원자성

  • Atomicity
  • 트랜잭션 내의 명령은 반드시 완벽히 수행
  • 모두가 수행되거나 오류시 전부가 취소되어야함

일관성

  • Consistency
  • DB의 전체 요소는 트랜잭션 수행 전과 트랜잭션 수행 완료 후의 상태가 같아야함 (질량 보존 법칙처럼)

독립성

  • Isolation = 격리성 = 순차성
  • 둘 이상의 트랜잭션이 병행 실행되는 경우 다른 트랜잭션 연산이 끼어들 수 없음
  • 수행 중인 트랜잭션은 완료될 때 까지 다른 트랜잭션에서 참조 불가.

영속성

  • Durability = 지속성
  • 시스템이 고장나도 영구적으로 반영

Commit

Rollback

  • Active : 트랜잭션 실행 중
  • Failed : 트랜잭션 오류 발생으로 중단
  • Aborted : 트랜잭션 비정상적 종료로 Rollback 연산 실행한 상태
  • Partially Committed : 트랜잭션 마지막 연산까지 실행됬으나 Commit은 안 한 상태
  • Committed : 트랜잭션이 성공적으로 종료되어 Commit 연산 실행한 상태

회복

장애 발생으로 DB가 손상되었을 때 복구하는 작업, Recovery

  • 트랜잭션 장애 : 실행 또는 로직 오류
  • 시스템 장애 : 하드웨어 오동작, 소프트웨어 손상, 교착상태
  • 미디어 장애 : 물리적 데미지

회복기법

연기 갱신 기법

  • Deferred Update
  • 트랜잭션동안 갱신된 내용이 Log에 보관됨
  • Partially Committed 상태에서 Log에 보관한 내용을 실제 DB에 기록
  • Redo 작업만 가능

즉시 갱신 기법

  • Immediate Update
  • 트랜잭션 중이라도 DB에 반영
  • 장애 대비로 갱신 내용을 Log에 보관
  • Redo, Undo 모두 사용 가능

그림자 페이지 대체 기법

  • Shadow Paging
  • 트랜잭션을 Rollback할 때, 갱신된 이후의 실제 페이지 부분에 그림자 페이지를 대체하여 회복
  • 로그, Undo, Redo 필요 없음

검사점 기법

  • Check Point
  • 복구 시점을 로그에 보관하고 그 시점부터 회복작업을 수행

병행제어

다중 실행되는 트랜잭션들이 DB의 일관성을 파괴하지 않도록 트랜잭션 상호작용을 제어하는 것

목적

  • DB 공유 최대화
  • 시스템 활용도 최대화
  • DB 일관성 유지
  • 응답시간 최소화

직렬화 가능성

병행수행된 각각의 트랜잭션 결과는 각 트랜잭션을 독자적으로 실행했을 때의 결과와 같아야한다.

문제점

  • 갱신 분실 : 갱신 결과의 일부가 없어짐 (Lost Update)
  • 비완료 의존성 : 하나의 트랜잭션이 실패 후 회복되기 전에 다른 트랜잭션이 실패한 갱신결과를 참조하는 현상 (Uncommitted Dependency)
  • 모순성 : 두 개의 트랜잭션이 병행될 때 원치 않는 자료를 이용 (Inconsistency)
  • 연쇄 복귀 : 하나를 Rollback시 다른 것도 Rollback 되는 경우 (Cascading Rollback)

병행제어 기법

로킹

  • Lock이 허락되어야만 액세스할 수 있도록 하는 기법
로킹단위Lock 수병행성공유도
작음낮음감소
작음높음증가

2단계 로킹 규약

  • Tow-Phase Locking
  • 직렬성을 보장하지만 교착상태 예방 불가

타임 스탬프 순서

  • 트랜잭션을 실행 하기 전에 Time Stamp를 부여하여 부여된 시간에 따라 처리
  • 교착상태 발생 안함

최적 병행수행

  • 검증 = 확인 = 낙관적 기법
  • Read Only 트랝개션일 경우 충돌률이 낮으므로 병행제어를 안하고 실행

다중 버전 기법

  • 갱신될 때마다 버전을 부여하여 관리

무결성

  • DB 데이터의 정확성, 일관성을 보장하기 위해 부정확한 자료가 DB내에 저장되는 것을 방지하기 위한 제약조건
  • 사용자로부터 DB를 보호
  • 사용자가 정확하게 DB를 사용할 수 있도록 보장
  • 대표적인 방법은 중앙 통제에 의한 데이터 갱신
  • Null 무결성 : 특정 속성이 Null이 될 수 없음
  • 고유 무결성 : 각 튜플의 값이 서로 달라야함
  • 참조 무결성 : 외래키 값은 Null이거나 참조 릴레이션의 기본키 값과 같아야함.
  • 도메인 무결성 : 특정 속성이 그 도메인에 속해야함.
  • 키 무결성 : 하나의 테이블에는 적어도 하나의 키가 존재해야함.
  • 관계 무결성 : 릴레이션에 한 튜플의 삽입 가능 여부 또는 다른 릴레이션 튜플 사이의 관계에 대한 적절성 여부를 지정.
  • 개체 무결성 : 기본 키를 구성하는 어떤 속성도 Null이나 중복값을 가질 수 없음

DB 보안

  • 권한이 없는 사용자로부터 DB를 보호
  • 사용자들이 DB를 사용하고자 할 때 언제든지 사용할 수 있도록 보장

암호화

개인키 암호방식

  • alias 비밀키 암호방식 = 대칭 암호방식 = 단일키 암호화 기법
  • 동일한 키로 데이터를 암복호화
  • 전위, 대체, 대수, 합성기법
  • 암복호화 속도가 빠름
  • 알고리즘 단순
  • 파일 크기가 작음
  • 사용자가 증가하면 키 파일이 많아짐
  • DES : 64Bit의 평문 블록56Bit의 16개의 키를 이용해 암호 계산

공개키 암호방식

  • 서로 다른키로 데이터를 암복호화
  • 암호화키는 공개키로 복호화키는 관리자가 관리
  • alias 비대칭 암호 방식
  • 키 분배가 용이
  • 관리할 키 개수가 적음
  • 암복호화 속도가 느림
  • 알고리즘 복잡
  • 파일 크기가 큼
  • RSA

권한 부여

  • GRANT 사용자 등급 TO
  • REVOKE 사용자 등급 FROM
  • CASCADE 사용시 권한을 부여받았던 사용자가 다른 사용자에게 부여한 권한도 연쇄적으로 삭제됨

사용자 등급

  • DBA : DB 관리 책임자
  • RESOURCE : DB 및 테이블 생성 가능자
  • CONNECT : 단순 사용자

분산 DB

보안, 보호가 어렵다.

구성

  • 분산처리기
  • 분산db
  • 통신네트워크

목표

  • 위치 투명성 : DB의 논리적인 명칭으로 액세스 가능 (Location Transparency)
  • 중복 투명성 : 사용자는 하나의 데이터만 존재하는 것처럼 사용 (Replication Transparency)
  • 병행 투명성 : 다수의 트랜잭션이 실행 가능 (Concurrency Transparency)
  • 장애 투명성 : 장애가 나도 트랜잭션 처리 가능 (Failure Transparency)

미들웨어

  • 분산 환경에서 구성원을 연결하고 구성원 간의 차이를 극복하도록 범용으로 개발된 소프트웨어
  • 클라이언트와 서버 사이에 존재하면서 다중통신, 데이터 액세스 프로토콜과 인터페이스를 지원
  • 통신 미들웨어 : NOS
  • DB 미들웨어 : ODBC
  • 분산 객체 미들웨어 : CORBA, DCOM

자료구조

어떠한 자료구조에서도 필요한 모든 연산을 처리하는 것이 가능하다.

분류

{
"선형":{
"리스트":["선형", "연결"],
"스택",
"큐",
"덱"
},
"비선형":["트리","그래프"]
}

리스트

선형 리스트

  • 연접 리스트 = Dense List = 축차 구조 = Sequential Structure
  • 배 열
  • 간단한 자료 구조
  • 접근 속도 빠름
  • 중간 자료 삽입시 연속된 빈공간이 있어야함
  • 기억장소 효율 가장 좋음
  • 이동횟수 : 삽입시 n+12\frac{n+1}{2} 삭제시 n12\frac{n-1}{2}
  • 삽입 삭제 시 자료의 이동이 필요하기 때문에 번거로움

연결 리스트

  • 노드의 삽입 삭제 작업 용이
  • 기억공간이 연속적이지 않아도 저장 가능
  • 연결을 위한 포인터가 필요하기 때문에 기억공간 효율이 좋지 않음
  • 트리를 표현할 때 가장 적합
  • 희소행렬을 표현하면 기억장소가 절약됨
  • 희소행렬 : 행렬의 요소 중 많은 항이 0으로 되어 있는 형태

종류

  • 단순 연결 리스트
  • 단순 환상 연결 리스트
  • 이중 연결 리스트
  • 이중 환상 연결 리스트

스택

  • 한 쪽에서만 삽입 삭제 가능

  • 후입선출 (LIFO)

  • Top : 마지막으로 삽입된 자료의 위치 = 스택 포인터

  • Bottom : 스택 바닥

  • Overflow

  • Underflow

  • 부 프로그램 호출시 복귀주소 저장

  • 함수 호출의 순서 제어

  • 인터럽트 복귀주소 저장

  • 후위 표기법 연산

  • 0 주소 지정방식 명령어의 자료 저장소

  • 재귀 프로그램

  • 컴파일러를 사용한 언어 번역

  • 선형 리스트의 한쪽에서는 삽입, 다른쪽에서는 삭제만 이루어짐

  • 선입선출 (FIFO)

  • 시작과 끝을 표시하는 두개의 포인터 존재

  • 프런트 포인터

    • 가장 먼저 삽입된 자료의 포인터
    • 삭제 작업시 사용
  • 리어 포인터

    • 가장 마지막에 삽입된 자료의 포인터
    • 삽입 작업시 사용
  • 운영체제 작업 스케줄링

  • spool

  • 삽입과 삭제가 리스트 양쪽에서 일어남
  • Double Ended Queue
  • Stack과 Queue를 합쳐서 만듦
  • Scroll : 입력 제한 데크
  • Shelf : 출력 제한 데크

트리

  • 족보, 연산수식, 구조도, 힙(heap)에 사용
  • 근노드 : Root node
  • 단말노드 : Terminal Node = Leaf Node
  • 차수 : Degree = 가지 수
  • 레벨 : 노드의 레벨
  • 깊이 : 최대 레벨
  • 숲 : Forest 여러 트리의 집합
  • tree의 degree : MAX(degree)

이진트리

  • 차수가 2이하인 노드로 구성된 트리
  • 레벨 i에서의 최대 노드의 수는 $2^{n-1}$
  • 전체의 최대 노드의 수는 $2^n-1$
  • 단말 노드 수가 $N_0$, 차수(가지 수)가 2인 노드의 수가 $N_2$라고 할 때 $N_0=N_2+1$ 성립

정이진 트리

꽉찬 트리

전이진 트리

왼쪽부터 오른쪽으로 하나씩 빠짐없이 채워진 트리

사향트리

한 쪽 자식 노드가 없는 치우친 트리

  • 왼쪽 사향 이진 트리
  • 오른쪽 사향 이진 트리

이진트리 운행법

  • Preorder : Root > Left > Right
  • Inorder : Left > Root > Right
  • Postorder : Left > Right > Root

수식의 표기

  • Prefix : 연산자 > Left > Right

  • Infix : Left > 연산자 > Right

  • Postfix : Left > Right > 연산자

  • Infix to Prefix or Postfix : 연산에 따라 괄호로 묶고 연산자를 괄호 앞뒤로 옮김

  • Prefix or Postfix to Infix : 운행 순서에 따라 괄호로 묶어 연산자를 피연산자 사이로 이동

스레드 이진트리

  • 이진트리에서 발생하는 Null 링크를 트리 운행에 필요한 다른 노드의 포인터로 사용하도록 된 트리
  • Nil로 Null pointer 기록
  • 왼쪽이 Nil이면 운행상 전 노드를 가리킴
  • 오른쪽이 Nil이면 운행상 후 노드를 가리킴
  • Nil이 아닐경우 다음 노드를 가리킴

그래프

  • 정점 (Vertex)와 간선 (Edge)로 이루어짐
  • 차수
    • 무방향 그래프 : 한 정점에 연결된 간선 수
    • 방향 그래프 : 진입(Indegree), 진출(Outdegree)
  • 완전 그래프의 간선 수
    • 무방향 그래프 : $\frac{n(n-1)}{2}$
    • 방향 그래프 : n(n1)n(n-1)
  • 사이클 : 같은 정점으로 시작과 끝이 이루어짐
  • 최대 사이클 : 사이클을 이루는 경로 중 최대 경로의 길이

인접행렬

  • Adjacency Matrix
  • 선이 있으면 1, 없으면 0으로 표기

최소 비용 신장 트리

  • MST = Minimum-Cost Spanning Tree
  • 가중치가 작은 간선들을 사이클을 이루지 않게 연결한 그래프

정렬

{
"내부정렬": {
"선택": ["힙"],
"삽입": ["삽입", "쉘"],
"교환": ["버블", "선택", "퀵"],
"병합": ["2-Way Merge Sort"],
"분배": ["기수"]
},
"외부정렬": [
"밸런스 병합",
"케스케이드 병합",
"폴리파즈 병합",
"오실레이팅 병합"
]
}

고려사항

  • 데이터의 양
  • 초기 데이터의 배열 상태
  • 키 값들의 분포 상태
  • 소요공간 및 작업시간
  • 시스템의 특성

내부정렬

삽입정렬

  • 이미 순서화된 파일에 NN번째 키를 앞의 N1N-1개의 키와 비교
  • 뒤에서 앞으로 비교

쉘정렬

  • 매개변수
  • 입력파일이 부분적으로 정렬되어 있는 경우

선택정렬

  • NN개의 레코드에서 최소값을 찾아 첫 번째 레코드에 놓고 나머지 N1N-1개 중에서 다시 최소값을 찾아 두번째... 를 반복
  • 앞에서 뒤로 비교

버블정렬

  • 주어진 파일에서 인접한 두 개의 레코드를 비교하여 그 크기에 따라 레코드 위치를 서로 교환
  • 계속 정렬 여부를 플래그 비트로 결정

퀵정렬

  • 작은 값은 왼쪽에 큰 값은 오른 쪽에 모이도록해서 분할해서 정렬
  • 가장 바름
  • 스택 필요

힙 정렬

  • 전이진 트리를 이용한 정렬 방식

2-Way 합병 정렬

  • Merge Sort
  • 두 개의 키를 한 쌍으로 하여 각 쌍에 대해 순서를 정함
  • 이미 정렬되어 있는 두 개의 파일을 한 개의 파일로 병합

기수 정렬

  • 큐를 이용하여 자릿수 별로 정렬
  • 레코드의 키를 분석하여 같은 수 또는 문자끼리 그 순사에 맞는 버킷에 분배했다가 버킷 순으로 레코드를 꺼내어 정렬
  • 키워드를 나타내는 레이블 내의 주소로 키워드를 변경

검색

선형 검색

  • 첫 번쨰 레코드 키 값부터 차례로 비교하여 검색
  • 순차 검색

제어 검색

  • 반드시 순서화된 파일이여야 검색 가능
  • 한 번의 비교가 끝난 후 비교 대상이 된 레코드를 다음에 비교할 대상을 선택하는 기준으로 사용
  • 이분 검색 : M = F+L2\frac{F+L}{2}
  • 피보나치 검색
  • 보간 검색 : 있음직한 부분의 키를 택하여 검색, 프로그래밍 불가
  • 블록 검색 : 블록으로 분할해 인덱싱 후 어느 인덱스에 있는지 검색 후 블록 내를 다시 선형 검색

이진 트리 검색

  • 파일을 이진 검색 트리로 구성하여 검색
  • 이진 검색 트리 : 왼쪽 자식노드는 부모보다 작고, 오른쪽 자식노드는 부모보다 크게 구성

해싱

  • 해싱은 DAM 파일을 구성할 때 사용, 접근 속도는 빠르나 기억공간 요구
  • 다른 방식에 비해 검색속도가 가장 빠름
  • 삽입 삭제 작업이 많을 때 유리
  • 키-주소 변환방법

해시테이블

  • 버킷 : 하나의 주소를 갖는 파일의 한 구역
  • 슬롯 : 한 개의 레코드를 저장할 수 있는 공간, N개의 슬롯이 모여 하나의 버킷
  • Collision : 서로 다른 두 개 이상의 레코드가 같은 주소를 갖는 현상
  • Synonym : 충돌로 인해 같은 주소를 같는 레코드들의 집합
  • Overflow : 버킷에 저장할 공간이 없는 상태, Collision은 발생해도 Overflow는 발생하지 않을 수 있음

해싱함수

  • 제산법 : 소수를 사용함 (Division)
  • 제곱법 : 키를 제곱해 중간부분을 추출 (Mid-Square)
  • 폴딩법 : 키를 여러부분으로 나눠 각 부분을 더하거나 XOR한 값을 추출 (Folding)
  • 기수 변환법 : 키 숫자의 진수를 다른 진수로 변환시켜 초과한 자릿수를 절삭
  • 대수적 코딩법 : 키 값의 비트 수를 다항식의 계수로 간주
  • 계수 분석법 : 숫자 분포를 분석하여 비교적 고른자리
  • 무작위법 : 랜덤

Overflow 해결

개방 주소법

  • 선형 방법
  • 순차적으로 그 다음 빈 버킷을 찾아 저장
  • Open Addressing

폐쇄 주소법

  • Overflow된 레코드를 별도의 Overflow영역에 저장하고 체인(Pointer)로 홈버킷과 연결
  • Direct Chaining : Cylinder Overflow Area에 보관 (해시테이블 내)
  • Indirect Chaining : Independent Overflow Area에 보관 (해시테이블 밖)

재해싱

새로운 해싱함수로 새로운 홈 주소

인덱스

  • 데이터 레코드를 빠르게 접근하기 위해 구성하는 것
  • 데이터가 저장된 물리적 구조와 밀접한 관계
  • 레코드가 저장된 물리적 구조에 접근하는 방법을 제공
  • 삽입과 삭제가 빈번하면 인덱스의 갯수를 최소화

m-원 검색 트리

  • m-Way Search Tree
  • 키 값의 일부분이 동일한 문자열이나 숫자로 구성된 자료를 표현하는데 효과적
  • 삽입, 삭제시 트리 균형을 유지하기 위해 복잡한 연산이 필요

B트리

  • 균형된 m원 검색트리
  • 모든 Leaf는 같은 레벨이 있다.
  • 한 노드 안에 있는 키 값들은 오름차순을 유지

B+트리

  • B트리의 변형, 인덱스 세트와 리프 노드로만 구성된 순차 데이터 세트로 구성
  • B트리의 연산과정을 줄일 수 있는 트리구조

트라이 색인

  • Trie
  • 탐색을 위한 키 값을 직접 표현하지 않고 키를 구성하는 문자나 숫자 자체의 순서로 키 값을 구성하는 구조
  • 키 값이 문자 또는 숫자일 경우, 키 값들에 대해 일부분이 같은 문자나 숫자로 구성되어있을 때 적합
  • 삽입, 삭제시 노드의 분열과 병합이 없음
  • 키 값의 분포를 예측할 수 있다면 기억장소를 절약 가능

파일 편성

순차 파일

  • Sequential File = 순서파일
  • 물리적 연속 공간에 순차적으로 기록
  • 급여관리 등 기간별로 일괄처리를 주로 하는 경우에 적합
  • 자기테이프

장점

  • 기록 밀도가 높아 기억공간 효율적 사용
  • 어떠한 매체에도 적용
  • 키 순서대로 편성되어 취급 용이
  • 키 순서대로 레코드 처리시 빠름

단점

  • 새로운 레코드 삽입, 삭제시 재구성을 위해 전체를 복사해야함
  • 검색시 처음부터 순차적으로 하기에 효율이 낮고 응답시간이 느림

색인 순차 파일

  • Indexed Sequential File
  • 순차 처리와 랜덤처리가 모두 가능하도록 레코드를 키 값순으로 정렬시켜 기록
  • 레코드의 키 항목만을 모은 색인 파일을 구성하여 편성
  • 색인을 이용한 순차적인 접근방법을 제공하여 ISAM
  • 레코드를 참조시 색인 탐색 후 색인이 가리키는 포인터를 사용해 직접 참조
  • 자기디스크
  • 자기테이프 불가능

구성

  • 기본 구역 : 실제 레코드를 기록하는 부분, 키 값 순으로 저장
  • 색인 구역
    • 마스터 색인 구역 : 실린더 색인 구역의 정보가 많을 경우, 해당 레코드가 어느 실린더 색인 구역에 기록되어 있는지를 기록
    • 실린더 색인 구역 : 트랙 색인의 최대키 값과 해당 레코드가 기록된 실린더의 정보가 기록, 한 파일당 하나씩 만들어짐
    • 트랙 색인 구역 : 트랙상 기록되어 있는 데이터 레코드 중의 최대 키 값과 주소가 기록, 한 실린더당 하나씩, 처리할 레코드가 실제로 어느 트랙에 기록되어있는지를 판별
  • 오버플로 구역 : 기본구역에 빈공간이 없어서 예비적으로 확보해둔 구역
    • 실린더 오버플로 구역 : 해당 실린더의 기본구역에서 오버플로된 데이터 기록
    • 독립 오버플로 구역 : 실린더 오버플로에 더 이상 기록할 수 없을 때 사용할 수 있는 예비 공간

장점

  • 삽입, 삭제, 갱신 용이
  • 파일 전체를 복사할 필요 없음

단점

  • 색인 및 오버플로 구역을 구성하기 위한 추가 기억공간 필요
  • 오버플로 레코드가 많아지면 파일을 재편성
  • 파일이 정렬되어 있어야함
  • 삽입, 삭제가 많으면 효율이 떨어짐
  • 액세스 시간이 랜덤 편성파일보다 느림

정적 인덱스

  • 인덱스의 구조가 변경되지 않고 내용만 변하는 구조
  • ISAM

동적 인덱스

  • 추가로 삽입될 레코드를 감안하여 빈 공간을 미리 예비해 두는 인덱스
  • VSAM
  • 블록에 레코드가 가득차면 동적으로 분열
  • 일정 수의 레코드가 유지되지 않는 블록은 병합

VSAM

동적 인덱스 방법을 이용한 색인 순차 파일

  • 기본 구역과 오버플로 구역을 구분하지 않음
  • 레코드를 삭제하면 그 공간을 재사용
  • 제어 구간에 가변 길이 레코드를 쉽게 수용

직접 파일

  • Direct File = Random File = DAM (Direct Access Method)
  • 레코드에 특정 기준으로 키가 할당, 해시 함수를 이용해 이 키에 대한 물리적 상대 레코드 주소를 계산 후 레코드 저장
  • 자기 디스크, 자기 드럼

장점

  • 물리적 주소를 통해 각 레코드에 직접 접근
  • 접근시간이 빠름
  • 삽입, 삭제, 갱신 용이
  • 어떤 레코드라도 평균 접근 시간에 검색 가능

단점

  • 레코드 주소 변환 과정 필요
  • 기억 공간 효율 저하
  • 물리적 구조에 대한 지식 필요
  • 프로그래밍 복잡
  • 충돌 발생 염려로 기억공간 확보

역파일

  • Inverted File
  • 여러 개의 색인을 만들어 항목별 특성에 맞게 분배한 파일로 다중 키 파일에 속함
  • 다중 키 파일 : 하나의 데이터에 여러개의 접근 방법을 지원하는 구조
    • 순차 처리와 임의 처리가 모두 가능하도록 편성
    • 검색 속도가 빨라 빠른 시간 내에 정보를 얻고자하는 시스템에 적합
  • 색인 값을 결합하여 레코드 주소를 결정
  • 레코드를 파일 중간에 삽입하기 쉬움
  • 검색 속도 빠름
  • 데이터 파일에 접근하지 않아 응답시간이 줄어듦
  • 처리가 쉬움
  • 색인 항목이 가변적

다중 리스트 파일

  • Multi-List File
  • 다중 키파일의 한 종류
  • 각 키에 대해 색인을 만든 후 각 데이터 레코들 간에 다중 리스트를 구축하여 구성
  • 색인의 각 항목들의 길이가 고정적으로 관리가 용이
  • 수정, 삭제 검색이 효율적

다중 링 파일

  • Multi-Ring File
  • 같은 특성을 가진 레코드들을 포인터로 연결하여 구성
  • 같은 항목값을 가진 레코드를 한꺼번에 처리하는 효과적
  • 기억장소 절약
  • 자료 중복성 배제
  • 레코드 형식이 달라도 처리 가능

로데오 스탬피드 공략 및 동물 포획 (170810)

· 23 min read

기본 공략

  • 티켓수익이 늘어나는 4레벨까지 서식지 업그레이드하기
  • 6시간마다 찾아오는 동물원 크루즈를 광고와 함께 사용하기
  • 에픽동물 3종세트(10,000원)을 구입하고 시작하길 추천 (광고를 봐서 미션을 갱신하고, 부활할 수 있지만 30초씩 소요되는 시간대비 금화벌기가 힘들다)
  • 다른 대륙으로 가기 전에 보스미션 끝내기

Ctrl+F 키로 원하는 동물을 검색하거나 오른쪽 TOC에서 원하는 동물을 클릭하면 이동합니다. 획득경로가 적히지 않은 경우는 랜덤으로 출현하는 동물이거나 입수정보가 없는 동물입니다.

번식 컨텐츠가 추가되었습니다 댓글 남겨주시면 없는 새끼 동물 반영합니다!

사바나

버펄로

총 7마리

이름획득
케이프 버펄로-
포레스트 버펄로얼룩말 한 마리 이상 잡기
워터 버펄로얼룩말 한 마리 이상 잡기
들소얼룩말 한 마리 이상 잡기
컬리펄로8단계 업그레이드
버페라리9단계 업그레이드
디아버펄로한 마리의 버팔로로 750미터를 달리기

얼룩말

총 7마리

이름획득
얼룩말-
말룩얼-
사탕말-
일렉트로 얼룩말3000m 이상 달리기
펑키 얼룩말8단계 업그레이드
전설의 얼룩말9단계 업그레이드
트로잔 얼룩말사바나의 7가지 동물을 한 판에서 다 타기

코끼리

총 8마리

이름획득
아프리카 코끼리-
매머드-
코끼리군주-
히피코끼리-
나팔코끼리8단계 업그레이드
소화전 코끼리9단계 업그레이드
젤레펀트페이스북 이벤트
해골코끼리코끼리 보스미션

타조

총 8마리

이름획득
타조-
셀레버디-
글램 락스타조-
기사타조-
심장부타조8단계 업그레이드
이끼타조9단계 업그레이드
오스튀치할로윈 이벤트
보스타조타조 보스미션

기린

총 7마리

이름획득
기린-
더티기린-
타코기린파-
하이볼러-
은하기린8단계 업그레이드
기린바타9단계 업그레이드
외계기린기린 보스미션

독수리

총 7마리

이름획득
독수리-
이집트 독수리-
화려한 독수리-
자본가 독수리1500m 이상 달리기
팝 독수리8단계 업그레이드
드라코리안9단계 업그레이드
독수리온1000m 이후에 기린으로만 갈 수 있는 언덕 위

사자

총 8마리

이름획득
사자-
단델리온-
검치호1800m 이상 달리기
그리폰길들인 그리폰 미션
울보 사자8단계 업그레이드
마사이 사자9단계 업그레이드
라이언 셰프사자로 30마리 동물 먹기
괴물 니엔설날 이벤트 주괴125개

정글

멧돼지

총 7마리

이름획득
멧돼지-
인디언 돼지-
돼지리-
보크-
아름다운 돼지리8단계 업그레이드
으르렁 코골이9단계 업그레이드
호그 라이더멧돼지 보스미션

고릴라

총 8마리

이름획득
서부 고릴라-
산 고릴라-
쿼터백 고릴라-
궤릴라-
로릴라8단계 업그레이드
소릴라9단계 업그레이드
볼카노릴라고릴라 보스미션
고릴럭설날 이벤트 주괴200개

악어

총 7마리

이름획득
엘리게이터-
프로게이터-
스노커다일-
버니게이터2000m 달리기
브라이드질라8단계 업그레이드
크루코다일9단계 업그레이드
꼬끼오아침 시간에 달리기

하마

총 7마리

이름획득
하마-
피그미 히포-
발레리나 히포-
힙합호타머스-
히피포타머스8단계 업그레이드
타웨레트9단계 업그레이드
플라티모파머스한 마리의 하마로 30초 타기

코뿔소

총 8마리

이름획득
코뿔소-
하와이노-
사과 피에노-
펠린오-
스카이노세로스8단계 업그레이드
마르셀 라이노9단계 업그레이드
슬라임노세루스할로윈 이벤트
다이노세로스7마리 다른 동물 차례대로 타기

호랑이

총 7마리

이름획득
호랑이-
라이거-
웅크린 호랑이-
H.R 호랑이3000m 이상 달리기
흰호랑이8단계 업그레이드
핑크 팬더라9단계 업그레이드
호랑이 릴리호랑이 보스미션

큰부리새

총 7마리

이름획득
큰부리새-
혼빌-
블루칸-
브류칸-
무칸8단계 업그레이드
카주칸9단계 업그레이드
쓰리칸큰부리새로 100m 점프

염소

총 8마리

이름획득
산염소-
바이킹 염소-
아쿠아염소-
미치광이 염소-
스텔스염소 마크28단계 업그레이드
이형접합 염소체9단계 업그레이드
고스트할로윈 이벤트
이각수염소 보스미션

라마

총 8마리

이름획득
라마-
짠물라마-
파냐타라마-
엘리자베스풍 라마-
나비라마8단계 업그레이드
버락 오블라마9단계 업그레이드
하이퍼 광라마라마 보스미션
알파카 폭죽설날 이벤트 주괴250개

총 7마리

이름획득
불곰-
곰추장1000m 이상 달리기
느림보곰-
곰케이크-
비버곰8단계 업그레이드
TIME LOCKER 곰9단계 업그레이드
SU-24 곰비행기산독수리로 2000m 날기

늑대

총 7마리

이름획득
회색늑대-
불늑대-
생존자늑대-
크고 나쁜 늑대-
재버늑대8단계 업그레이드
TIME LOCKER 개9단계 업그레이드
애꾸눈 늑대수염늑대 보스미션

야크

총 7마리

이름획득
야크-
스컹야크-
무서운 설야크-
웅이야크 나무1300m 이상 달리기
배틀 야크8단계 업그레이드
아프로디지 야크9단계 업그레이드
기어펑크 야크야크로 한 판에 10마리 날리기

독수리

총 7마리

이름획득
대머리독수리-
호크 경-
이글워드 가위날개-
배트큘라 백작-
큰독수리 나방8단계 업그레이드
비행기 승무원9단계 업그레이드
로빈수리30~100m 사이의 절벽 밖에 생성

무스

총 7마리

이름획득
알프스무스-
이끼무스-
가문비무스-
고원무스-
괴물무스8단계 업그레이드
초콜릿 무스9단계 업그레이드
다크무스8마리 다른 동물 차례대로 타기

오지

총 7마리

이름획득
메리노 양-
늑대 탈을 쓴 양-
사탕 양-
레이디 매애매애-
양치기 아가씨8단계 업그레이드
양보르기니9단계 업그레이드
코난 더 매애매애리안양 보스미션

캥거루

총 7마리

이름획득
붉은캥거루-
킥복서루-
레인저루-
막대사탕루-
스키비디피두3000m 이상 달리기
캥거푸들9단계 업그레이드
칸구루캥거루 보스미션

드롭베어

총 7마리

이름획득
드롭베어-
드롭베어 던디-
드롭 바이키-
구두쇠 코알라-
러셀 코3000m 이상 달리기
드롭베어 영애9단계 업그레이드, 2000m이상
괴수드롭베어2000m 이상 달리면 불타는 나무 위

웜뱃

총 8마리

이름획득
웜뱃-
전투웜뱃500m 이상 달리기
웜캣1100m 이상 달리기
웜베이비-
웜드리안4000m 이상 달리기
웜바멜론9단계 업그레이드
봄뱃땅 속에서 3마리 날리기
웜배트맨할로윈 이벤트

에뮤

총 8마리

이름획득
에뮤-
비행사 에뮤-
사춘기 에뮤-
에뮤지션-
데임 에뮤엄청 안나옴, 조건이 있는듯.
열대에뮤9단계 업그레이드
불사에뮤에뮤 보스미션
꼬끼오에뮤설날 이벤트 주괴300개

낙타

총 7마리

이름획득
낙타-
신밧드 낙타-
카멜플라주-
화산낙타-
카멜롯8단계 업그레이드
혹등낙타9단계 업그레이드
카멜레온8마리 다른 동물 차례대로 타기

큰박쥐

총 7마리

이름획득
큰박쥐-
비행상자-
큰박쥐여우-
흡혈박쥐-
과일박쥐8단계 업그레이드
비행양말9단계 업그레이드
감시박쥐풍차 또는 지붕있는 집을 부수기

툰드라

펭귄

총 7마리

이름획득
펭귄-
황제펭귄-
의원펭귄-
파일럿펭귄-
펭기스칸-
하키펭귄9단계 업그레이드
요정펭귄다른 맵 동물로 시작 후, 툰드라 동물 7마리 타기

물개

총 7마리

이름획득
평범한 물개-
표범 물개-
바나나 껍질-
경비 물개-
하프 물개-
에스키모 물개9단계 업그레이드
해군 물개물개 보스미션

바다코끼리

총 7마리

이름획득
바다코끼리-
바다소-
무법자 바다코끼리-
바다코끼리-
바이킹 바다코끼리-
무도회 바다코끼리9단계 업그레이드
검치 바다코끼리2000m 이상 달리기

토끼

총 7마리

이름획득
북극토끼-
해적토끼-
초코토끼-
포격토끼-
메뚜기-
개그토끼9단계 업그레이드
눈토끼토끼 연속 5마리 타기

부엉이

총 7마리

이름획득
흰올빼미-
수리부엉이-
호시탐탐부엉이-
외양간올빼미-
로빈부엉이-
부엉부엉9단계 업그레이드
수학부엉이부엉이 보스미션

여우

총 7마리

이름획득
북극여우-
나팔여우-
조로-
키츠네-
골디여우-
주크여우9단계 업그레이드
태엽여우여우로 1500m 달리기

북극곰

총 7마리

이름획득
북극곰-
딸기곰-
폴로곰-
태양곰-
순찰곰-
중산모곰9단계 업그레이드
롤러곰북극곰 보스미션

쥐라기

파라사울로로푸스

총 8마리

이름획득
파라사우롤로푸스-
술로푸스-
쇠지렐로푸스-
파라솔로푸스-
마스카랄로푸스-
탐험갈로푸스-
포잘로푸스-
노롤로푸스파라사울로로푸스 보스미션

랩터

총 8마리

이름획득
벨로시랩터-
깃털 랩터-
치실랩터-
쿨쿨랩터-
미녀 랩터-
철학자 랩터-
쌈 랩터-
사신 랩터-

트리케라톱스

총 8마리

이름획득
트리케라톱스-
트리케라클롭스-
트리케라캅스-
하늘케라톱스-
키메라톱스-
미디움레어톱스-
악몽케라톱스-
게이샤라톱스트리케라톱스 보스미션

티라노사우루스 렉스

총 8마리

이름획득
티라노사우루스 렉스-
T-멕스-
바다 렉스-
G-렉스-
마녀 렉스-
T-헬스-
폭구노사우루스 렉스-
파괴왕 렉스-

브론토사우루스

총 8마리

이름획득
브론토사우루스-
네스 호의 괴물-
광대토사우루스-
힙스터사우루스-
핫도고사우루스-
디플로도쿠스8종의 다른 동물을 순서대로 타기
페가사우루스-
히드라-

안킬로사우루스

총 8마리

이름획득
안킬로사우루스-
천킬로사우루스-
독킬로사우루스-
판사우루스-
탱킬로사우루스-
낚시꾼사우루스안킬로사우루스로 티라노사우르스 렉스와 충돌
식물사우루스-
멋쟁이사우루스-

프테로닥틸

총 8마리

이름획득
프테로닥틸-
소닥틸-
치료닥틸-
파라오닥틸-
스웨어로닥틸-
요정닥틸-
석유로닥틸-
머리털로닥틸프테로닥틸 보스미션

스테고사우루스

총 8마리

이름획득
스테고사우루스-
시드니 오페라사우루스-
시침질사우루스-
나초사우루스-
유의어사우루스-
톱사우루스스테고사우루스로 관목 10개 먹기
크리스탈사우루스-
전기사우루스-

에픽

총 3마리

이름획득
캐시카우구매
미션 노새구매
불사조 까마귀구매

새끼

  • 큰박쥐
    • 새끼 큰박쥐 : 밧줄 작아지는 속도 -6%, 날짐승 급강속도 -3%
    • 새끼 비행상자 : 밧줄 작아지는 속도 -6%, 상자 획득 동전 25%, 날짐승 급강 속도 -4%
    • 새끼 큰박쥐여우 : 밧줄 작아지는 속도 -10%, 점프 높이 6%, 날짐승 급강 속도 -6%
    • 새끼 흡혈박쥐 : 속도 -6%, 길들이는 속도 15%, 밧줄 작아지는 속도 -1%
  • 낙타
    • 새끼 낙타 : 불타는 속도 -15%
    • 새끼 카멜플라주 : 밧줄 작아지는 속도 -10%, 불타는 속도 -20%
    • 새끼 신밧드 낙타 : 화나는 속도 -8%, 불타는 속도 -15%, 상자 획득 동전 3%
    • 새끼 화산낙타 : 속도 5%, 불 타는 속도 -50%
    • 새끼 카멜레온 : 밧줄 크기 9%, 점프 높이 9%, 사냥 효과 9%
    • 새끼 혹등낙타 : 점프 속도 5%, 수중 이동속도 20%, 불 타는 속도 -20%
  • 에뮤
    • 새끼 에뮤 : 속도 4%, 점프 높이 4%
    • 새끼 비행사 에뮤 : 속도 6%, 날짐승 급강 속도 -8%, 시작 밧줄 크기 1%
    • 새끼 사춘기 에뮤 : 화나는 속도 -6%, 속도 -4%, 길들이는 속도 14%
    • 새끼 에뮤지션 : 속도 5%, 희귀 동물 출현 8%, 짝짓기 동물 출현 12%
  • 웜뱃
    • 새끼 웜뱃 : 점프 속도 6%
    • 새끼 전투웜뱃 : 점프 속도 12%, 상자 획득 동전 20%
    • 새끼 웜캣 : 화나는 속도 -5%, 점프 속도 7%, 점프 높이 7%
    • 새끼 봄뱃 : 점프 속도 7%, 길들이는 속도 14%, 불타는 속도 -25%
    • 새끼 웜배트맨 : 밧줄 작아지는 속도 -8%, 점프 속도 10%, 점프 높이 4%
  • 드롭베어
    • 새끼 드롭베어 : 희귀 동물 출현 4%, 불 타는 속도 -8%
  • 캥거루
    • 새끼 킥복서루 : 밧줄 크기 5%, 점프 높이 10%, 몸부림 -5%
    • 새끼 막대사탕루 : 사냥 효과 10%, 몸부림 -10%, 짝짓기 동물 길들이는 속도 2%
    • 새끼 캥거푸들 : 점프 높이 5%, 미션 획득 동전 15%, 몸부림 -15%
    • 새끼 메리노 양 : 길들이는 속도 12%
    • 새끼 늑대 탈을 쓴 양 : 속도 6%, 점프 속도 3%, 길들이는 속도 15%
    • 새끼 사탕양 : 희귀 동물 출현 7%, 길들이는 속도 12%, 사냥 효과 9%
    • 새끼 레이디 매애매애 : 짝짓기 동물 출현 20%, 길들이는 속도 20%, 짝짓기 동물 길들이는 속도 5%
    • 새끼 양치기 아가씨 : 화나는 속도 -8%, 짝짓기 속도 20%, 길들이는 속도 2%
  • 무스
    • 새끼 가문비무스 : 밧줄 크기 6%, 화나는 속도 -8%, 미션 획득 동전 5%
  • 코뿔소
    • 새끼 코뿔소 : 상자 획득 동전 20%
    • 새끼 하와이노 : 화나는 속도 -2%, 상자 획득 동전 20%, 수중 이동 속도 10%
  • 큰부리새
    • 새끼 블루칸 : 희귀 동물 출현 3%, 짝짓기 동물 출현 7%, 날짐승 급강 속도 -6%
  • 고릴라
    • 새끼 산 고릴라 : 밧줄 크기 3%, 점프 높이 3%, 짝짓기 동물 출현 6%
  • 타조
    • 새끼 셀레버디 : 타고있는 동물 속도 8%, 희귀 동물 출현 4%
  • 독수리
    • 새끼 독수리 : 밧줄 크기 4%
  • 버펄로
    • 새끼 케이프 버펄로 : 화나는 속도 -3%
    • 새끼 포레스트 버펄로 : 화나는 속도 -4%
    • 새끼 워터 버펄로 : 화나는 속도 -4%, 수중 이동 속도 10%
    • 새끼 들소 : 밧줄 작아지는 속도 -5%, 화나는 속도 -5%
    • 새끼 컬리펄로 : 동물 화나는 속도 -5%, 짝짓기 동물 출현 8%, 짝짓기 동물 길들이는 속도 5%
    • 새끼 디아 버펄로 : 동물 화나는 속도 -4%, 점프 높이 8%
    • 새끼 버페라리 : 화나는 속도 -4%, 속도 14%, 점프 속도 5%

버그

  • 정글 맵에서 간혹 맵 밖으로 나가져서 출발
  • 정글 맵에서 기린으로 맵 밖으로 나갈 수 있음
  • 오지 맵에서 양이 벽 속에서 나옴
  • 동물을 타면서 드롭베어에게 잡아먹히면 거리가 음수로 변하면서 땅 밑으로 계속 들어감

동물출처