2010년 12월 12일 일요일

Herbert.A.Simon

Herbert.A.Simon

허버트 알렉산더 사이먼(Herbert Alexander Simon, 1916년 6월 15일 ~ 2001년 2월 9일)은 독일계 미국인으로 제한된 상황에서의 의사 결정 모델에 관한 이론으로 1978년 노벨 경제학상을 수상한 미국의 심리학자/경제학자 및 인지과학자다.

그는 인간 인지능력의 한계(제한적 합리성)라는 관점을 가지고 주류 경제학이 가정하는 합리성에 대해 그 체계를 비판한 최초의 사회학자였다. 사이먼의 주장은 후에 경제학과 심리학이 결합하는 행동 경제학으로 꽃을 피우지만, 그가 처음 합리성에 의문을 제기한 당시에는 그의 논점이 아직 개념적 단계에 머물렀고, 모델화가 어려웠기 때문에 대다수의 경제학자들에게 인정받지 못했지만 후에 행동 경제학 형성에 큰 영향을 끼친다. 또한 그는 디지털 컴퓨터는 단순한 숫자 조작 기계라기보다 ‘범용 목적의 상징(기호)조작체계’(general purpose symbol manipulation system)인 튜링기계로 간주할 수 있다고 주장하였다

생애
미국 위스콘신 주 밀워키에서 태어난 그는 전자 제어부분 디자이너로 피드백 장치를 개발하는 데 크게 기여한 아버지의 영향을 받아 20여개국의 언어를 읽을 정도로 다재다능했던 인물로 알려져 있다. 1933년 시카고 대학에 입학하여 정치학을 전공했으나, 이후 대공황과 세계대전의 여파로 사회 문제에 관심을 가지게 됨에 따라 평생동안 연구한 주제인 '신고전주의 경제학에서 가정하는 합리성이 충족되지 않은 상황에서 인간은 어떻게 논리적으로 사고하는가?'에 몰두하게 된다. 1939년 - 1942년까지 캘리포니아 버클리 대학의 행정 연구소에서 '캘리포니아 주 정부 산하 구제사업부에 몇명의 사회사업가를 두는 게 적절한가'를 결정하는 연구로 '조직 이론' 발전에 영향을 주며, 이후 RAND의 시스템 연구소에서 오랜 연구 파트너인 앨런 뉴얼(Allen Newell),을 만나 1956년 인지과학(Cognitive Science)의 탄생에 지대한 역할을 한다. 또한 다니엘 카너먼 (Daniel Kahneman)과 함께 행동 경제학 탄생에 결정적인 역할을 한다. 이후 문제해결과 관련한 연구를 수행하다 84세의 나이로 세상을 떠났다. 그는 경영학, 조직학, 컴퓨터 과학, 인공지능, 인지 과학, 경제학 등 다양한 분야에 막대한 영향을 준 학자로 평가 받고 있다.


정보처리 이론
1960년대 까지 학습이론의 결합주의적 관점이 주류를 이루었다. 그러나 결합주의적 관점은 유기체의 적극적인 기능을 설명하기가 힘들었다. 이에 인간이 외부 세계로부터 획득한 정보를 어떻게 지각하고 이해하고 기억하는가를 연구하는 정보처리이론이 등장하게 되었다.

* 인간기억은 복잡하고 능동적인 정보조직자다. 기억체제는 정보를 장기 기억고에 저장하기 위해 변형시킨다.

* 학습과정은 자극에 주의를 기울이고, 그 자극을 부호화 하여 저장, 인출하는 단계를 거친다.

* 학습은 환경에서 들어온 정보가 인지구조로 변형되어 들어가는 과정이다.

* 학습과정에 대응되는 교수과정은 새로운 자극의 수용안내, 부호화 촉진, 저장과 인출의 촉진이다.

* 교수계획의 주요 요점은 새로운 학습을 기존의 인지구조에 관련 시키는 것이며, 정보를 유의미한 부호로 변형시키는 것이다.

* 정보처리 이론에서는 학습이 일차적 연구과제가 아니며, 관련된 교실 적용은 간접적인 추론일 뿐이다. 그러나 실제 교실에 적용할 수 있는 많은 시사점을 가지고 있다.



노벨 경제학상을 수상할 정도로 경제를 이해할 수 있다는 것이 놀라웠고, 이런 위인들의 이론, 업적등을 조사하다 보면 도움이 되지 않을까 해서 조사해 보았다. 책을 접하기 전에는 알지 못하는 사람이었지만 조사하고나니 대단한 사람인 것을 알았다. 항상 위인들을 조사하면 느끼는 것이지만 열심히 노력해서 훌륭한 사람이 되야겠다 라는 생각이 든다.

2010년 11월 20일 토요일

Disk Scheduling

디스크 스케줄링이란?
- 디스크 입출력을 위해 대기하고 있는 요구 ( Request )들 중에서 어느 요구를 먼저 처리할 것인가를 결정
- 대기 중인 요청 들에 대해 서비스하는 순서를 어떻게 결정하는가에 따라 디스크 시스템의 성능이 크게 달라지기 때문이다.

< 디스크 스케줄링 대상 >
탐구시간 ( Seek Time ) - 데이터의 기록/판독을 위해 디스크 헤드를 필요한 실린더로 이동시키는 데 소요되는 시간
회전지연시간 ( Rotational Delay, Latency Time ) - 디스크 헤드가 지정된 실린더에 도착한 후 지정된 섹터가 헤드 아래에 도착
                                                                               할 때까지 기다리는 시간
데이터전송시간 ( Data Transmission Time ) - 디스크 주소 상의 표면 번호에 따라 해당 섹터를 읽어 전송하거나 전동된 데이터를
                                                                       해당 섹터에 기록하는 시간
데이터 접근 시간 ( Data Access Time ) - 탐구 시간 + 회전 지연 시간 + 데이터 전송 시간
비중 - 탐구 시간 > 회전 지연 시간 > 데이터 전송 시간

< 탐구 시간 최적화 스케줄링 >
FCFS ( First Come First Served ) 스케줄링
- 디스크 입출력 요구들이 도착한 순서대로 서비스 하는 기법, 디스크 입출력에 대한 부하가 작을 경우에 적합 /  순서대로 서비스 하는 것이기 때문에 비효율 적이다.
160/200/90/170/20/190/120/130
100 160 200 90 170 20 190 120 130 순서로 진행.
# 처음 디스크 헤드 위치 - 100번 실린더
# 총 이동거리 - 60 + 40 + 110 + 80 + 150 + 170 + 70 + 10 = 690

SSTF ( Shortest Seek Time First ) 스케줄링
- 응답 큐에 대기 중인 요구들 중, 현재 헤드의 위치부터 가장 가까운 요구를 먼저 서비스하는 방식
- 큐의 요구들을 처리하는 동안 헤드의 이동 거리 극소화 -> 단위 시간당 처리량 극대화
- 평균 응답 시간도가 비교적 낮게 유지 -> 단 디스크 시스템의 부하가 크지 않을 경우
- 응답시간에 대한 예측성이 저하됨 ( 부하가 커지면 무기한 연기 현상 초래 가능 )

가장 가까운 위치부터 서비스하기 때문에 avg seek time이 적으나 공평하지 못하다.

160/200/90/170/20/190/120/130
100 90 120 130 160 170 190 200 20 순서로 진행

# 처음 디스크 헤드 위치 - 100번 실린더
# 총 이동거리 - 10 + 30 + 10 + 30 + 10 + 20 + 10 + 180 = 300

SCAN 스케줄링
- SSTF 기법과 비슷함
- 현재 큐에 대기 중인 요구들 중에서, 현재 헤드의 진행 방향으로 현재 헤드의 위치와 가장 가까운 요구를 먼저 서비스하고, 마지막
  실린더에 도착했을 때에 방향을 전환한다.
- SSTF 기법의 예측성이 저하되는 단점 해결
  - 대체적으로 단위 시간당 처리량, 평균 응답 시간의 면에서 우수함
  - 실제 디스크 시스템에서 사용되는 스케줄링 기법의 근간
  방향을 바꾸지 않고 한방향으로만 서비스한다.
    가장 안쪽, 바깥쪽 track은 상대적으로 손해이다.
160/200/90/170/20/190/120/130
100 90 20 0 120 130 160 170 190 200 순서로 진행
# 처음 디스크 헤드 위치 - 100번 실린더, 먼저 0번 실린더 쪽으로 이동
# 총 이동거리 : 10 + 70 + 20 + 120 + 10 + 30 + 10 + 20 + 10 = 300

LOOK 스케줄링 / 엘레베이터 알고리즘
- SCAN 스케줄링 기법과 유사
- 헤드가 진행하는 도중 진행 방향의 앞쪽으로 더 이상의 요구가 없으면 양 끝의 실린더까지 진행하지 않고 그 자리에서 방향을 바꿈

160/200/90/170/20/190/120/130
100 90 20 120 130 160 170 190 200 순서로 진행

# 처음 디스크 헤더 위치 - 100번 실린더, 먼저 0번 실린더 쪽으로 이동, 서비스 하는 동안 추가 요구는 없다고 가정,
# 총 이동거리 - 10 + 70 +100 + 10 + 30 + 10 + 20 + 10 = 260

N-step SCAN 스케줄링
- SCAN 스케줄링 기법과 유사
- 디스크헤드가 방향을 바꾸는 시점에서 큐에 대기 중인 요구들만을 대상으로 서비스 진행
- SCAN과의 차이점 ( 서비스가 진행되는 중에 도착한 요구들에 대해서는 다음번 방향을 바꾼 후에 처리 )
- SSTF나 SCAN기법 보다 응답 시간의 분산이 작음, 무기한 연기의 가능성 배제

# 만약 헤드가 0번 실린더 쪽으로 이동 중 80번 실린더에 요구가 추가로 도착한 경우
SCAN - 90번 실린더 요구 처리 후, 80번 실린더로 이동하며 서비스 시작
N-step SCAN - 20번 실린더 처리 후 0번 실린더에서 방향을 바꾼 후 서비스 시작

C-SCAN ( Circular SCAN ) 스케줄링
- SCAN 기법과 유사
- 미리 정해진 서비스 방향 ( 안쪽 또는 바깥쪽 )으로 헤드가 이동할 때에만 큐의 요구들을 처리
- 응답 시간의 분산이 매우 작은 기법, 응답 시간에 대한 예측성이 매우 높다.

160/200/90/170/20/190/120/130
100 90 20 0 255 200 190 170 160 130 120 순서로 진행

# 처음 디스크 헤더 위치 - 100번 실린더, 먼저 0번 실린더 쪽으로 이동, 서비스 하는 동안 추가 요구는 없다고 가정,
# 총 이동거리 - 10 + 70 +20 + 255 + 55 + 10 + 20 + 10 + 30 + 10 = 490

C-LOOK 스케줄링
- C-SCAN 기법과 기본적으로 비슷하다.
- LOOK 기법처럼 헤드의 진행방향을 더 이상 요구가 없다면 즉시 방향을 바꿈

[출처] [Win] Disk Scheduling|작성자 OpenSec


avg seek time 효율성 순서 : SSTF → SCAN → C-SCAN → FCFS
fairness 효율성 순서 : FCFS → C-SCAN → SCAN → SSTF
disk heavy load인 경우 효율성 순서 : C-SCAN → SCAN → SSTF 


2010년 10월 31일 일요일

Assembly language로 프로그래밍 하기!!

세가지 수를 입력 받아서 큰수부터 나열하는 프로그램을 짜라는 과제다.

먼저 프로그래밍을 어떤식으로 할 건지에 대해서 방향을 잡기 위해

먼저 C로 코드를 작성하자.

#include <stdio.h>
int main(void)
{
 int num1, num2, num3;
 scanf("%d %d %d" , &num1, &num2, &num3);
 if (num1 < num2)
  if (num2 < num3)
   printf(" num1 num2 num3 ");
  else
   if (num1 < num3)
    printf(" num1 num3 num2 ");
   else
    printf(" num3 num1 num2 ");
 else
  if(num2>num3)
   printf(" num3 num2 num1 ");
  else
   if(num1 < num3)
    printf(" num2 num1 num3 ");
   else
    printf(" num2 num3 num1 ");
 return 0;
}
이런식의 코딩이 가능하다

그러면 이제 이를 활용해서 assembly langauge로 코드를 짜보자

BR      main
num1:    .BLOCK  2                                       
num2:    .BLOCK  2                                       
num3:    .BLOCK  2                                       
main:    DECI    num1,d                                  
            DECI    num2,d
            DECI    num3,d
         BR      num12
num12: LDA    num1,d
         SUBA    num2,d
         BRLT    num12a
         BR      num12b
num12a: LDA    num2,d
         SUBA    num3,d
         BRLT    num123
         BR      num23

num23: LDA    num1,d
         SUBA    num3,d
         BRLT    num132
         BR      num312
num12b: LDA    num3,d
         SUBA    num2,d
         BRLT    num321
         BR      num13
num13: LDA    num1,d
         SUBA    num3,d
         BRLT    num213
         BR      num231
num123: DECO num1,d
              DECO num2,d
              DECO num3,d
              BR finish

num132: DECO num1,d
              DECO num3,d
              DECO num2,d
              BR finish
num213:DECO num2,d
              DECO num1,d
              DECO num3,d
              BR finish
num231: DECO num2,d
              DECO num3,d
              DECO num1,d
              BR finish
num312: DECO num3,d
              DECO num1,d
              DECO num2,d
              BR finish
num321: DECO num3,d
              DECO num2,d
              DECO num1,d
              BR finish
finish:  STOP
         .END


명령어는 그렇게 많이 필요한 건 아니었지만, 그래도 오래걸렸다 ..휴

그래도 역시 C로 코딩 하는게 편하고 좋은듯 .... (익숙해서그런진몰라도 ㅋㅋ)

2010년 10월 27일 수요일

효율성이 보장되면서 가격이 저렴한 컴퓨터를 만들어보자!!

컴퓨터를 사용하는 데에 있어 중요하게 여기는 건 인터넷 사용에 무리가 없을정도로 돌아가야 하고, 고샤양의 게임은 아니더라도 기본적인 게임들은 돌아가야 합니다.
문서작업과 여러 부가 기능들은 인터넷이 잘 돌아가고 중간사양의 게임이 잘 돌아간다면 무리가 없을 것으로 보입니다.
저는 게임을 하더라도 그렇게 고사양의 게임은 안하는 편이기 때문에 가격의 효율을 따져 컴퓨터 부품들을 골라보았습니다.

CPU : AMD 페넘II-X4 965 Black Edition (데네브)
게이밍, 편집과 HD 컨텐트까지 할 수 있는 강력한 기능에, 적절한 가격으로 사람들이 많이 선호하는 제품입니다.
3.4GHz의 동작 속도와 4개의 코어 수, 배수 제한 해제의 특징을 가지고 있습니다.
가격대비 성능이 좋은 것 같아 골랐습니다.

메인 보드 : GIGABYTE GA-H55M-USB3
그리 비싸지 않은 제품인데 불구하고 소비자 선호도 1위를 차지한 제품입니다.
이유는 제품의 안정성과 조립시 편의성이 보장되고, 좋은 성능과 부가기능 덕분입니다.
이 제품은 가격비 성능비가 워낙 좋기 때문에 피시방에서도 주로 쓰이는 제품으로, 신뢰가 가서 선택했습니다.

그래픽 카드 : XFX 라데온 HD 5670 D5 512MB Rextech 
보급형을 뛰어넘은 3D 성능, 동영상 가속, 저발열, 저전력 그리고  DirectX 11 과 ATI Eyefinity 까지 소비자의 마음을
충족시켜 줄 수 있는 모델입니다.
그리고 중요한 것은 가격이 다른 제품에 비해 상당히 저렴한 편이기 때문에 선택했습니다.

케이스 : BESTECH 세븐
무난한 모양에 충분한 공간이 확보되어 있고, 가격이 상당히 저렴합니다.
물론 케이스가 내부 기기들은 보호하고, 이를 잘 조립해야 컴퓨터의 성능이 최고로 발휘되지만,
케이스는 디자인을 제외하고, 낮은 가격에 치중하도록 노력했습니다.

RAM : 삼성전자 DDR3 2G PC3-10600
2GB의 용량을 가지고 있는 제품입니다. RAM의 가격이 계속 내려가고 있는데,
그 중 무난한 제품입니다. 그리 비싸지 않으면서 호환성이 좋고, 안정적인 메모리 이기 때문에 선택했습니다.

HDD/SDD : Seagate 1TB Barracuda 7200.12 ST31000528AS (SATA2/7200/32M)
1TB의 대용량을 지원하고, 뛰어난 성능을 자랑하는 제품입니다. 전송률은 최대 3.0GB/s 입니다.
또한 작동환경이 변하면 알아서 헤드와 원판의 거리를 조절하는 안정성을 높인것이 눈에 띄는 제품 입니다.
또한 가격도 적당하고, 친환경 하드디스크로서 소비전력, 소음, 용량 모두 줄일 수 있는 효율적인 제품이라 선택했습니다.

ODD : LG전자 Super-Multi GH-22LS50
ODD로 유명한 회사인 LG전자 제품을 택했는데, 하나의 드라이브로 모든 DVD 미디어를 기록할 수 있는 장점이 있는 제품입니다.
또한 디스크 손상이 있어도 부드럽게 재생할 수 있는 기능을 탑재하였기 때문에 안정성을 높일 수 있습니다.
가격도 그리 비싼 편이 아니기 때문에 무난한 제품입니다.
하지만 단점이 있다면, 작동시 발생하는 소음이 있을 수 있습니다.

파워 : Heroichi HEC-Rapter 500WP
에너지 절감, 시스템 고장의 따른 이상과 내부 이상으로부터 시스템을 보호 할 수 있고, 확장성,
안정적인 전원 공급, 고효율 설계를 통한 에너지 절감 등의 장점이 있는 제품 입니다.
가격도 저렴하고, 여러가지 장점이 많은 제품으로 보여 선택했습니다.

이렇듯 효율성 높고, 가격이 저렴한 제품 위주로 골라 보았지만, 아직 이를 직접 사서 조립해 본것이 아니기 때문에
각 부품간 호환이 될지도 알지 못하고, 각 제품이 조화롭게 동작해서 앞에 제시했던 조건들을 만족할 지는 모르겠지만,
이렇게 한 번 부품을 골라 봄으로서 향후에 컴퓨터 부품을 조립할 기회가 생겼을 때 훨씬 수월하게 일을 진행 할 수 있을 것 같습니다.
의미있었던 과제였던 것 같습니다.

2010년 10월 9일 토요일

Boolean algebra (불 대수, 부울 대수)

1. Boolean algebra는?

영국의 수학자 조지 불(George Boole)이 18세기 중엽에 창안한 대수의 한 형식. 컴퓨터 동작의 기초가 된다. 불 대수는 x나 y의 수치적 상관관계를 다루지 않고 논리적 상관관계를 다루는데, 이것은 연산의 종류와 변수들이 참인가 거짓인가에 따라서 논리적 명제들이 참 아니면 거짓이라는 논리에 바탕을 두고 있다. 불 대수의 2가지 중요한 측면은 ㉠변수들을 참 또는 거짓의 단지 두 값 중의 하나로 한정할 수 있고, ㉡이들 변수 간의 상관관계를 논리곱(AND), 논리합(OR), 부정(NOT) 등의 연산자로 논리적으로 나타낼 수 있다는 것이다. 불 대수의 이 2가지 측면은 디지털 계산에 사용되는 전자 회로에 응용될 수 있으므로 정보를 처리하고 문제를 해결하는 데 사용된다. 예를 들면, 참과 거짓은 전압의 유무에 의해 쉽게 컴퓨터 고유 언어의 2진수 1(참)과 0(거짓)으로 나타낼 수 있다. 또한 불 논리는 ‘만일 A가 참이고 B가 참이면 결과는 언제나 참이다.’를 의미하는 ‘A AND B=true’와 같은 명제에 바탕을 두고 있다. 이러한 논리는 컴퓨터 회로에 논리 게이트 로 설계해 놓을 수 있다. 논리 게이트는 비트 1과 비트 0이 불 논리에 일치하는 결과(출력)를 생성하도록 전기의 흐름을 제어한다. 하나의 컴퓨터 내에 AND, OR, NOT이나 기타 불 연산자를 나타내는 논리 게이트를 결합할 수 있으며, 하나의 논리 게이트 출력이 다른 논리 게이트 입력으로 투입되어 최종 결과가 두 수의 합과 같은 의미 있는 데이터가 되도록 할 수 있다.

2. Boolean algebra 기본 공식

1]

1) X + 0 = X 2) X * 1 = X
3) X + 1 = 1 4) X * 0 = 0
5) X + X = X 6) X * X = X
7) X + X(bar) = 1
8) X * X(bar) = 0
9) X(bar*2) = X

2]

◎ 교환 법칙
⑩ X + Y = Y + X
⑪ X Y = Y X

◎ 결합 법칙
⑫ X + ( Y + Z ) = ( X + Y ) + Z
⑬ X ( Y Z ) = ( X Y ) Z

◎ 분배 법칙
⑭ X ( Y + Z ) = X Y + X Z
⑮ X + Y Z = ( X + Y )( X + Z )

3. Boolean algebra 에서 변수들의 상관관계를 표현하는 방법인 논리 게이트

1.OR Gate
 1+1 = 1

입력
출력
A
B
Y
0
0
0
0
1
1
1
0
1
1
1
1





논리식 : A+B

2.AND Gate
 
1*1=1,1*0=0
입력
출력
A
B
Y
0
0
0
0
1
0
1
0
0
1
1
1


논리식 : A*B

3.NOT Gate
낫게이트. 부정게이트 컴퓨터는 참을 0 아닌 모든수. 거짓을 0. 게이트를 통과하게 되면 값이 1 0으로 0 1 반전
입력
출력
A
Y
0
1
1
0

논리식 :  A(bar)

4.NAND Gate
AND+NOT.

입력
출력
A
B
Y
0
0
1
0
1
1
1
0
1
1
1
0

논리식 : A*B(전체 bar)

5.NOR Gate
OR+NOT.

입력
출력
A
B
Y
0
0
1
0
1
0
1
0
0
1
1
0

논리식 : A+B (전체 bar)
  
6.EX - OR Gate (배타적 논리 게이트)
서로 같지 않으면 1이 출력.
입력
출력
A
B
Y
0
0
0
0
1
1
1
0
1
1
1
0

7.EX - NOR Gate (일치 논리 회로)
서로 같으면 1출력.

입력
출력
A
B
Y
0
0
1
0
1
0
1
0
0
1
1
1

 

2010년 10월 5일 화요일

ASCII and Unicode

유니코드 (Unicode)


국제표준으로 제정된 2바이트계의 만국 공통의 국제 문자부호 체계(UCS: Universal Code System)를 말한다. 애플컴퓨터·IBM·마이크로소프트 등이 컨소시엄으로 설립한 유니코드(Unicode)가 1990년에 첫 버전을 발표하였고, ISO/IEC JTC1에서 1995년 9월 국제표준으로 제정하였다. 공식 명칭은ISO/IEC 10646-1(Universal Multiple-Octet Coded Character Set)이다.


데이터의 교환을 원활하게 하기 위하여 문자 1개에 부여되는 값을 16비트로 통일하였다. 코드의 1문자당 영어는 7비트, 비영어는 8비트, 한글이나 일본어는 16비트의 값을 지니는데, 이를 모두 16비트로 통일한 것이다. ISO/IEC 10646-1의 문자판에는 전세계에서 사용하고 있는 26개 언어의 문자와 특수기호에 대해 일일이 코드값을 부여하고 있다. 최대로 수용할 수 있는 문자수는 6만 5,536자이다. 이 가운데 3만 8,885자는 주요 국가의 언어를 구현하는 용도로 이미 할당되어 있고 6400자는 사용자 정의 영역으로, 나머지는 2만여 자는 새로 추가될 언어 영역으로 각각 비워두고 있다. 코드 할당비율을 보면 한자가 39.89%로 가장 많고, 한글 17.04%, 아스키 및 기호문자 10.39% 등의 순이다.

여기에 포함된 한글 코드 체계는 옛 한글의 자모를 포함한 한글자모 240자(HANGUL JAMO, 11열)와 한국표준인 KSC 5601의 조합형 한글자모 94자(HANGUL COMPATIBILITY, 31열), 한글에서 구현할 수 있는 최대 글자수 1만 1,172자를 가나다순으로 배열해 놓은 완성형(HANGUL, AC열∼D7열) 등 3종으로 되어 있다. 또한 각국의 문자를 2바이트로 수용하기 위해 우리나라와 중국·일본·타이완의 한자를 통합하였다. 한자의 비중이 높은만큼 동양권에서는 서체의 통합과 입출력 방식에 대해 계속 논의를 해오고 있다.

* 영문/숫자/한글/한자 등 모든 글자는 이론적으로 2바이트입니다. 그리고 파일에 저장될 때도 2바이트로 저장됩니다.

아주 희귀한 문자들은 2바이트를 초과할 수도 있습니다.

단, UTF-8 유니코드가 파일에 저장될 때, 영문/숫자는 아스키 코드와 똑같이 1바이트를 사용하고, 한글 등은 3바이트로 파일에 저장됩니다. UTF-8 유니코드는 아스키 코드와 영문 영역에서는 100% 호환됩니다. 만약 UTF-8 유니코드 문서에 한글 등이 전혀 없고, 영문과 숫자로만 이루어져 있다면, 그 파일은 아스키 코드와 동일합니다.

웹페이지를 유니코드로 만들 때에는 UTF-8 유니코드를 사용합니다.


* 전세계의 모든 언어를 하나의 파일에 쓸 수 있습니다. 물론 각 언어에 해당하는 폰트가 설치되어 있어야 합니다.

* 유니코드의 역사가 그리 오래되지 않아서, 아직도 유니코드를 잘 인식하지 못하는 컴퓨터가 있습니다. 특히 윈도우98이나 오래된 유닉스 시스템의 경우입니다. 그렇지만 유니코드로 작성된 인터넷 웹페이지는 대부분 잘 인식합니다.


(1) 보통의 한국어 텍스트 문서: 이것은 아스키 문서이며 유니코드가 아닙니다. 영문/숫자/기호는 1바이트. 한글과 한자는 2바이트로 표현됩니다. euc-kr 또는 ksc_c_5601-1987 로 불리는 인코딩이며 웹페이지 작성에 사용할 수 있습니다. 특수한 외국어 문자나 일본식/중국식 한자는 표현할 수 없습니다.

다음의 2개가 유니코드입니다:

(2) 일반 유니코드(Unicode): 모든 글자를 2바이트로 표현합니다. 전세계 모든 글자들을 한꺼번에 표현할 수 있습니다. 인터넷에 HTML 파일로 올릴 수 없습니다. 즉 웹페이지 작성에 쓸 수 없습니다.

(3) UTF-8 유니코드: 영문/숫자/기호는 1바이트로, 한글과 한자 등은 3바이트로 표현합니다. 전세계 모든 글자들을 한꺼번에 표현할 수 있습니다. 웹페이지 작성에 쓸 수 있습니다. (저의 mwultong.blogspot.com 이 블로그도 UTF-8 로 되어 있습니다)



아스키코드 (ASCII)




1963년 미국표준협회(ASA)에 의해 결정되어 미국의 표준부호가 되었다. 미니컴퓨터나 개인용 컴퓨터(PC)와 같은 소형 컴퓨터를 중심으로 보급되어 현재 국제적으로 널리 사용되고 있다.

아스키는 128개의 가능한 문자조합을 제공하는 7비트(bit) 부호로, 처음 32개의 부호는 인쇄와 전송 제어용으로 사용된다. 보통 기억장치는 8비트(1바이트, 256조합)이고, 아스키는 단지 128개의 문자만 사용하기 때문에 나머지 비트는 패러티 비트나 특정문자로 사용된다.

일반적으로 컴퓨터는 데이터를 8개의 비트 단위로 묶어 한 번에 처리한다. 비트는 2진법의 0과 1 가운데 하나를 나타내는 단위이다. 즉, 1비트는 0이 될 수도 있고, 1이 될 수도 있다. 비트 8개를 모아 놓은 것을 바이트(byte)라고 부른다. 그러므로 1바이트로 표시할 수 있는 최대 문자의 수는 256조합이 된다.

따라서 컴퓨터에서는 8비트씩을 묶어 처리하는 것이 가장 효율적이다. 예컨대 7개 비트 이하로 묶을 경우에는 표현 가능한 수가 128이 된다. 그러나 이 숫자로는 세계 여러 나라에서 사용하는 모든 숫자·국가언어·기호 등을 충분히 표현할 수 없다. 반면에 9비트 이상일 경우에는 512가지나 되어 필요없는 영역이 많이 생기게 된다. 이 때문에 256가지의 영역마다 어떤 원칙에 의해 표현 가능한 모든 숫자·문자·특수문자를 하나씩 정해 놓은 것이 곧 아스키코드이다.

* 현재 사용되는 아스키(ASCII) 코드의 더 정확한 이름은 ANSI Code 입니다. (색깔을 나타내는 앤시 코드가 아니고 문자를 나타내는 규약입니다.)

* 영문/숫자 1글자는 1바이트, 한글/한자 1글자는 2바이트입니다.

* 하나의 인코딩당, 영문과 또다른 하나의 언어만 사용할 수 있습니다. 한국어 아스키 코드인 완성형(euc-kr) 인코딩에서는 영문과 한글 그리고 한국에서 사용되는 한자만 표현할 수 있습니다. 물론 일본어 가나도 섞여 있지만, 일본어 인코딩이 아니기에 일본인은 읽을 수 없습니다.

그래서 하나의 파일에 여러 언어를 동시에 표현하기 힘들거나 불가능합니다.

* 컴퓨터 초창기부터 사용되어 왔기에, 호환성이 아주 좋습니다.

* MS윈도우2000/XP이상의 운영체제에서는, 내부적으로 유니코드를 사용하지만, 사용자가 실제 읽고 쓰는 텍스트 문서는 대부분 아스키 코드입니다.

진법에 관하여~

진법

가장 간단한 진법은 1진법으로, 모든 자연수를 그 수 만큼의 숫자로 표현하는 것이다. 예를 들어서 숫자 7은 *******라고 표현할 수 있다. 일반적으로 1진법은 작은 숫자에 대해서만 유용하지만, 컴퓨터 과학 분야에서 사용되기도 한다.

1진법 표기는 좀 더 큰 값을 나타내는 다른 기호를 도입해서 간소화할 수 있다. 보통 이 기호들은 10의 거듭제곱을 표시하는 경우가 많다. 예를 들어서, *로 1을 나타내고, #로 10을 나타내고, @로 100을 나타낸다면, 403은 @@@@ ***로, 125는 @ ## *****로 간단하게 나타낼 수 있다. 고대 이집트 수 체계가 이러한 방법을 사용하며, 로마 숫자는 이 방법의 확장이다.

어떤 기호가 반복된 횟수를 나타내기 위한 특별한 기호를 도입해서 이를 더 간소화할 수 있다. 예를 들어서, 라틴 알파벳의 첫 아홉 글자(A부터 I까지)를 각각 "한 번"부터 "아홉 번"을 나타내기 위해서 사용한다면, 403이라는 숫자를 D@ C*라고 표현할 수 있다. 문자로 나타낼 때의 수 체계와 상관 없이, 한국어("사백 삼")와 영어("four hundred [and] three")를 비롯한 많은 자연어들이 이런 방법을 사용한다.

이보다 더 발전된 형태는 위치 기수법이다. 앞에서 사용한 "한 번"부터 "아홉 번"까지의 기호에 0을 나타내는 o라는 기호를 덧붙이고, 이 기호가 실제로 의미하는 값은 기호의 위치에 따라 10의 거듭제곱을 곱해서 표시한다고 하면, 2005라는 숫자는 BooE로 표현할 수 있다. 이때 0은 해당 거듭제곱을 "건너 뛰기" 위해서 필요하며, 다른 수 체계에서는 사용하지 않지만 매우 중요한 역할을 한다. 인도로부터 유래한 아라비아 숫자는 10을 밑으로 하는 위치 기수법으로, 현재 세계적으로 널리 쓰이고 있다.

위치 기수법을 사용한 계산은 앞에서 설명한 다른 기수법을 사용할 때보다 훨씬 쉽다. 또한 위치 기수법은 가능한 어떤 숫자를 표현하기 위해서 무한히 많은 기호를 도입할 필요가 없다. 예를 들어서 아라비아 숫자의 경우 0부터 9까지의 10개의 기호만으로 모든 자연수를 표현할 수 있다.

10진 위치 기수법은 현재 가장 널리 사용되고 있다. 이는 인간이 열 개의 손가락을 가지고 있다는 데서 유래한 것으로 보인다.

현재까지 역사적으로 사용되었거나 현재 사용되고 있는 기수들은 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 16, 20, 60이 있다. 그 중 2진법과 8진법, 그리고 16진법은 컴퓨터에서 자주 사용된다.






1. 진법 계산

10진법을 다른 진법으로 변환시키는 방법
10진법의 수를 다른 진법으로 나누어서 그 나머지를 취한 결과를 의미한다.

10진법을 8진법으로 변환시키는 방법
예) 10진수 259를 8진법으로 변환
259를 8로 나눈후 나머지 값을 뒤에서부터 쓰면 된다.

10진법을 2진법으로 변환시키는 방법
예) 10진수 125을 2진법으로 변환
125를 2로 나누어서 그 나머지를 뒤에서부터 쓰면 된다.

10진법을 16진법으로 변환시키는 방법
예) 10진수 735를 16진법으로 변환
735를 16으로 나누어 그 나머지를 뒤에서부터 쓰면 된다.

다른 진법을 10진법으로 변환시키는 과정
8진법을 10진법으로 변환시키는 과정
예) 8진수 413을 10진법으로 변환
4 * 82 + 1* 8 + 3 * 1

2진법을 10진법으로 변환시키는 과정
예) 2진수 1101을 10진법으로 변환
1 * 23 + 1 * 22 + 0 * 2 + 1 * 1

16진법을 10진법으로 변환시키는 과정
예) 16진수 AC5를 10진법으로 변환
A * 162 + C * 16 + 5 * 1 =

2진법을 8진법으로 변환시키는 방법
2진수 11011011011001을 8진법으로 변환시키는 과정
오른쪽부터 3bit씩 묶는다.
11 011 011 011 001


11011011011001(2) =33331(8)


2진법을 16진법으로 변환시키는 방법
①2진수 1110101011011를 16진법으로 변환시키는 과정
②오른쪽부터 4bit씩 묶는다.
1110101011011(2) = 1D5B(16)

8진법을 16진법으로 변환시키는 방법
8진수 1572를 16진수로 변환
8진수 1자리를 2진수 3bit로 펼쳤다가 2진수 4bit씩 오른쪽부터 묶는다.
1572(8) = 37A(16)
소숫점 이하 자릿수의 진법 변환
10진법을 8진법으로 변환시키는 과정
8진법을 10진법으로 변환시키는 과정
2진법을 10진법으로 변환시키는 과정


2. 진법의 연산

덧셈
10진수에서 더한 값이 10이 되었을 때 자리 올림(Carry)이 발생하듯이, 2진수에서는 더한 값이 2가 되면 자리 올림이 발생한다.

뺄셈
전자계산기에서의 뺄셈은 빼는 수의 보수를 더하여 계산한다.

보수는 2의 보수와 1의 보수가 존재한다.

2진수의 보수
1의 보수 : 각 자리값을 1은 0으로, 0은 1로 바꾸어 구한다.
2의 보수 : 1의 보수와 1을 더해서 구한다.
보기) 01001의 보수

1의 보수 : 10110
2의 보수 : 10111
1의 보수를 이용한 뺄셈
빼는 수의 1의 보수를 더한다.

자리 올림수(Carry) 발생시 : 자리 올림수를 버린다.

자리 올림수(Carry) 미발생시 : 결과값의 2의 보수를 산출한 후 부호 -를 붙인다.

예 1) (11101)2 - (00110)2의 계산


11101

+ 11010 (←00110의 2의 보수)

올림수는 버린다← 110111

올림수가 발생했으므로 올림수를 버린 나머지 결과가 최종 결과값이다.

(11101)2 - (00110)2 = (10111)2

예2) (1001)2 - (1101)2 의 계산
1001 .

+ 0011 (←1101의 2의 보수)

1100

올림수가 발생하지 않았으므로 결과값 1100의 2의 보수를 구하면, 0100이 나오고 이 값에 (-)를 붙인 값이 최종 결과값이다.

(1001)2 - (1101)2 = (-0100)2


곱셈과 나눗셈
2진수의 곱셈은 덧셈의 반복으로, 나눗셈은 뺄셈의 반복으로 이루어진다.

3.진법 변환