CISC(Complex Instruction Set Computer)
모든 고급언어 문장들에 대해 각각 기계 명령어가 대응되도록 하는것
RISC(Reduced Instruction Set Computer)
CISC의 많은 명령어중 주로 쓰이는것만을 추려서 하드웨어로 구현하는 것


이것이 핵심 개념인데요..

구체적으로 장단점을 따져보겠습니다.

CISC의 단점이자 RISC의 장점은 

CISC의 경우 하드웨어의 회로가 복잡해져서
RISC에 비해 가격이 비싸지고 발열이 많고 전력소모가 많게 됩니다.


CISC는 고급언어의 컴파일러의 번역과정을 간단하게 해줍니다.





X=(A+B)*(C+D)
이러한 기능을 수행하는 코드를 각 머신으로 작성한다고 했을때

(CISC)
ADD R1,A,B   
ADD R2,C,D  
MUL X,R1,R2  

(RISC)
LOAD R1,A    
LOAD R2,B   
LOAD R3,C   
LOAD R4,D    
ADD R1,R1,R2 
ADD R3,R3,R4
MUL R1,R1,R3 
STORE X,R1 

즉, CISC 각각의 명령어는 머신코드는 길지만 전체 프로그램 사이즈는 RISC보다 작습니다. 
따라서 코드를 수행할 때 RISC가 메모리를 더 많이 참조해야 하므로....
[CISC가 RISC보다 빠른 요인이 됩니다.]

CISC는 복잡한 하드웨어를 가지게 되므로 보통 hard wired방식 보다는 microprogram 방식을 사용하게 됩니다.
RISC는 hard wired 방식을 사용할 수 있습니다.
[RISC가 CISC보다 빠른 요인이 됩니다.]

CISC는 레지스터의 양이 많을 필요가 없고 RISC는 레지스터의 양이 많아야 하므로....
(예>함수에 파라미터를 메모리에 저장하는 경우와 레지스터에 저장하는 경우의 차이) 
CISC가 메모리의 access가 많아지게 됩니다. 
[RISC가 CISC보다 빠른 요인이 됩니다.]

RISC머신이 파이프라인구현이 용이하다라고 합니다..
(이 부분은 명령어 길이가 동일하기 때문에.. 그런것인가요?
정확한 이유를 모르겠습니다. 설명부탁드립니다.)
[RISC가 CISC보다 빠른 요인이 됩니다.]

AND

http://regulation.tistory.com/36
 

컴퓨터에서 어떤 크기의 데이터를 메모리에 저장할 때 바이트 단위로 나누어 저장한다. 
그렇다면 2바이트나 4바이트 크기의 데이터는 어떤 바이트 순서로 저장할까?

먼저 본론부터 말하면 CPU 유형에 따라 바이트 저장순서가 달라질 수 있다. 
크게 두 가지로 나뉘는 데 그것이 바로 ‘리틀 엔디안’과 ‘빅 엔디안’ 방식이다.

1. 리틀 엔디안 (Little-Endian)


시작 주소에 하위 바이트부터 기록

( Intel 80x86 (IBM-PC),  DEC VAX,  DEC PDP-11 ) 
주로 SCO 유닉스나 MS 윈도우가 돌아가는 Intel 프로세서 계열 시스템

 -----------------------------------------------------------------------

-----------------------------------------------------------------------


2. 빅 엔디안 (Big-Endian) 


시작 주소에 상위 바이트부터 기록 
( IBM370,  Motorola 68000,  Pyramid )
상용 UNIX가 주로 돌아가는 RISC 프로세서 계열 시스템


-----------------------------------------------------------------------

-----------------------------------------------------------------------


네트웍에서 데이터 전송을 할 때도 이러한 엔디안  방식에 주의해야 한다.
서로 다른 데이터 저장 방식의 시스템끼리 통신하게 되면 전혀 엉뚱한 값을 
주고받기 때문이다. (저장순서가 서로 반대임)

 네트웍 데이터 통신에서는 네트워크 바이트 순서(network byte order, 빅 엔디안)를 
따르도록 데이터의 바이트 순서를 변경해야 한다. 
(TCP/IP, XNS, SNA 규약은 16비트와 32비트 정수에서 빅 엔디안 방식을 사용함)

 클라이언트측 : 네트워크 바이트 순서(빅 엔디안)로 변경하여 전송한다. 
      htonl 같은 함수(host to network)를 이용해서 변경시켜주면 된다.

      data = htonl(data);   // data : 전송할 4바이트 값 
      write(client_sockfd, (void *)&data, sizeof(int));

 서버측 : 받은 값(네트웍 바이트 순서(빅 엔디안))을 자신에게 맞게 변환하여 사용한다. 
        ntohl 같은 함수(network to host)를 이용해서 변경시켜주면 된다.

        printf("%d\n", ntohl(data));   // data : 전송 받은 4바이트 값 
        close(client_sockfd);

 <이상>

 참조 : ‘endian에 대해서, 윤 상배(dreamyun@yahoo.co.kr)’ 등 인터넷 문서 일부


 ---------------------------------------------------------------------------

다음 코드를 이용하여 여러분의 프로그램이 수행될 시스템의
Endian(바이트정렬) 정보를 알 수 있습니다.
 
int x = 1;
 
if (*(char *)&x == 1) {
  /* Little-Endian */
  /* printf("Little-Endian\n"); */
}
else {
  /* Big-Endian  */
  /* printf("Big-Endian\n"); */
}
 
 
참조 : C Programming FAQs, By Steve Summit, January/1/2001

'Forensic & 침해사고대응' 카테고리의 다른 글

리틀엔디안 빅엔디안 내부 원리  (0) 2011.08.24
RISC VS CISC  (0) 2011.08.24
메모리 덤프하기  (0) 2011.08.22
[ 도구 ] 사용되는 도구들 몇가지  (0) 2011.08.22
[ 도구 ] WinAudit  (0) 2011.08.22
AND


/etc/network/interfaces  수정

auto eth0 
iface eth0 inet static
address IP주소
netmask 마스크주소
gateway gw주소

/etc/resolv.conf 생성후 수정
nameserver 168.126.63.1


#sudo /etc/init.d/networking restart

 
AND