컴퓨터 연산과정

·2024년 4월 16일

컴퓨터 구조

목록 보기
4/11
post-thumbnail

컴퓨터 연산 기본 과정 😀

  1. 디스크에 있는 프로그램을 RAM 메모리로 로드한다. : 프로그램은 프로세스가 된다
    cf) 만약 메모리에서 프로세스를 지우면 실행이 불가하다.
    +-%*.. 는 cpu가 해

  2. 메모리에서 레지스터로 데이터를 cpu에 복사한다.

  3. 계산 수행한다 (ex . 덧셈 ..)

  4. 레지스터에서 메모리로 데이터를 다시 복사한다.


ex) int a = 4;
	a = a +3;
1. cpu 가 a의 메모리주소에 접근
2. register 로 가져와
3. 4 + 3 = 7 덧셈계산해
4. 메모리 찾아가서 4를 7로 수정 

바이트 메모리 구조 😎

  • 프로그램은 주소를 사용하여 데이터를 참조한다
    - ram을 엄청난 바이트 배열이라고 생각해보자. 주소는 그 배열의 인덱스인 것이다.
    • 포인터 변수는 주소를 저장한다.
  • 시스템은 각 프로세스에 개별적인 주소 공간을 제공한다.
    - 프로세스는 실행 중인 프로그램의 인스턴스이다.
    • 주소 공간은 그 바이트 배열 중 하나이다.
    • 각 프로그램은 자신의 코드와 데이터만 볼 수 있다.
      cf) 각각의 프로세스들은 자기가 혼자 그 메모리를 다 쓰고 있다고 생각함.

기계어 🫡

어떤 컴퓨터든 문자 크기를 가진다.

  • 명목상 정수 값 데이터 크기: 주소의 크기

  • 예전에는 대부분의 기계들이 32bits 를 썼다. (주소를 4GB(2^32bytes)로 제한했음)

  • 오늘날은 대부분 64bit를 가진다. (이론적으로는 16EB 주소 크기를 가질 수 있음)

주소는 항상 바이트 위치를 지정한다. 😜

한 데이터의 주소는 그 데이터의 첫 번째 바이트의 주소이다.
연속된 데이터들의 주소는 4(32bit) 또는 8(64bit) 바이트씩 차이가 난다.

바이트 순서 😗

메모리 내의 multi-byte word 는 메모리에서 어떻게 정렬되어 있을까?

- Big Endian : 상위바이트, 즉 큰 쪽을 먼저 저장한다.
(least significant byte has highest address) 
				Sun, network packet headers
                
- Little Endian: 하위바이트, 즉 작은 쪽을 먼저 저장한다.
(least significant byte has lowest address)
				x86, ARM 프로세서가 동작하는 android, ios, windows
                cf) x86, ARM ..  직관적이지는 않지만 메모리 접근 속도가 빠르다.
                

ex.

    
변수 x는 4바이트 값인 0x01134355(hex 형식)을 갖고 있다.
변수 x의 주소(&x)는 0x100이다. 

위의 그림은 Big Endian(순서대로), 밑의 그림은 Little Endian(역순으로)

둘은 바이트 단위로 역순이다. 

포인터 표현 🙄

서로 다른 컴파일러와 기계는 객체에 다른 위치를 할당한다.(컴퓨터마다 할당되는 메모리 주소는 늘 다르니까)

프로그램을 실행할 때마다 서로 다른 결과를 얻을 수 있다.
메모리 주소는 OS 가 결정한다.

문자열 표현 😀

  • 문자열(String) in C
		-문자 배열로 표현된다.
        
    	-각 문자는 ASCII 형식으로 인코딩된다. 
        
    		- standard 7-bit encoding character set
        	- character"0" 의 코드는 0x30이다
        	- 숫자 i 는 코드 0x30 + i 를 갖는다.
            
     	- 문자열은 null-terminated 되어야 함
     	- final character = \0 (널문자) 
        
        (5byte의 string인 경우에도 5+1 해서 6byte로 저장된다.
        컴퓨터는 문자열이 문자인지 모르기때문에 null 문자로 구분하기 때문.)
  • 호환성

    바이트 순서는 문제가 되지 않는다. 
    
      (big endian 이든 little endian이든 상관없다는 뜻)
      (무조건 big으로 저장되긴 함)




x86 machine 코드

x86 machine 코드는 바이트의 연속이다.
가변길이의 명령으로 그룹화되어 있으며, string 처럼 보인다.
그러나 little endian 수들을 포함한다.




        
 



 
    

profile
어리둥절 빙글빙글 돌아가는 코딩세상~

0개의 댓글