ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 메모리,CPU,보수에 관해
    TIL 2021. 1. 5. 17:39

    2의 보수

    보수란? 

    컴퓨터가 뺄셈을 하기 위해 사용하는 개념 -> 컴퓨터는 사칙연산을 Adder를 통해서 하는데 뺄셈을 할 수 없어서 

    x-y라는 뺄셈을 x+(-y)라는 덧셈으로 바꿔서 처리한다.

     

    쉽게 말하면 보충을 해주는 수를 의미

    ex) 1에 대한 10의 보수는 9 , 3에 대한 17의 보수는 14의 개념

     

    1의 보수

    구하는 방식은 어렵지만 다르게 생각하면 쉽게 구할 수 있다.

    ex) 10진수 6을 2진수로 변환하면 (110)이 된다. 이 보다 한 자릿수 더 큰 수는 (1000)이다.

    여기서 1을 빼고 (111) 이 수에 (110)을 뺀 값인 (001)이 바로 10의 1의 보수이다.

     

    쉽게 푸는 방법은 0은 1로 1은 0으로 뒤집어 주는 방법이다.

     

    2의 보수

    2진수 (110) 보다 한자리 큰 수는 (1000)에서 (110)을 뺀 값인 010이 2의 보수 표현이 된다.

     

    이거도 쉽게 구할 수 있는데 1의 보수에 1을 더하면 된다. 001에서 1을 더해서 010이 되게

     

    2의 보수를 통해 얻은 수는 뭐가 다른데?

    010과 001은 10진수로 변환하면  1과 2가 되지만 컴퓨터는 '보수 표현'을 통해 얻어낸 2진수는 

    원래 수의 음수로 처리하기로 약속되어 있다.

     

    컴퓨터는 왜 2의 보수를 쓰는데?

    둘의 차이는 -> 1의 보수는 -0이 존재한다. 따라서 0 , -0 이 존재하지만 2의 보수는 0 하나만 존재한다.

     

    이게 이유 1이다.  0이 혼돈될 수 있기에

     

    2의 보수 쓰는 이유 2 : 

    1의 보수에서는 결괏값에 캐리가 발생하면 캐리 값을 연산해 주어야 하지만 2의 보수는 발생한 캐리를 무실 할 수 있다. 

    cpu구조

    https://coding-factory.tistory.com/351

    제어장치 : 컴퓨터에 있는 모든 장치들의 동작을 지시하고 제어하는 장치

     

    연산장치 (ALU, Artihmetic) : 연산을 수행 (산술 연산, 논리 연산, 관계 연산) 

    연산장치는 (가산기, 누산기 , 보수기 , 데이터 레지스터, 오버플로 검출기 등으로 구성) 

     

    레지스터: cpu 내부에서 처리할 명령이나 연산의 중간 결괏값을 일시적으로 기억하는 임시 기억저장소

    속도는 메모리 중에서 가장 빠름

     

    버스: 버스는 cpu, 메모리 , i/o 장치 등과 상호 필요한 정보를 교환하기 위해 연결된 공동의 전송선.

    메모리 구조

    논리적인 주소 : 각 프로그램마다 가지고 있는 주소

    물리적인(ram) 주소 : 프로그램이 올라가는 주소 , 커널이 가장 밑에 있다.

    https://hdacker.tistory.com/6

    메모리는 크게 2개의 영역으로 나뉜다 (커널 영역, 유저 영역(스택, 힙, 데이터, 코드))

     

    커널 영역에는 커널이 있다. 운영체제의 핵심

    커널은 시스템의 모든 것을 완전히 통제, 사용자 접근 x , 접근 시 system call을 통한 커널 모드로의 전환이 필요.

     

    유저 영역은 프로세스가를 묶는 세그먼트(논리적 주소를 의미 있는 단위로 쪼갠 것)가 존재하는데 이 세그먼트가 스택, 힙, 데이터, 코드 영역으로 이루어져 있는 것

    즉, 프로세스마다 스택, 힙, 데이터, 코드 영역이 존재한다는 것 , ram 자체에서 나눠지는 것이 아니라

     

     

     

    .
    https://jinshine.github.io/2018/05/17/%EC%BB%B4%ED%93%A8%ED%84%B0%20%EA%B8%B0%EC%B4%88/%EB%A9%94%EB%AA%A8%EB%A6%AC%EA%B5%AC%EC%A1%B0/

     

    jvm관점의 메모리 구조

    또 알게 된 것이 jvm도 하나의 프로세스라는 것이다. 

    jvm은 프로세스를 생성하는 프로세스이다. os에게 공간을 할당받고 할당받은 공간에서 또 RunTimeDataArea를 만들어 데이터를 관리한다. -> stack이나 heap과 영역을 공유하지 않는다.

     

    여태 말한 메모리의 stack이나 heap은 세그먼트를 통한 논리적인 주소로 물리적인 주소에 저장할 때 분산 적으로 저장을 한다. stack 따로 heap 따로 data 따로 근데 cpu에서 실행될 때는 mmu를 통해 주소 바인딩을 해서 사용을 한다.

    내가 헷갈린 것은 jvm의 runtime data Area와 적재 방식의 세그먼트였던 것이다.

    처음에 본 말이 맞았던 거 같다 jvm은 os로부터 별도의 메모리 공간을 할당받는다.

    jvm이 물리적인 메모리 공간에 있다가 cpu로 올라갔을 때 os가 별도의 메모리 공간을 할당해 줘서 그곳에 RunTimeDataArea를 저장하는 것이다.라고 결론을 내리겠다.

    ifcontinue.tistory.com/9

    instruction cycle

    컴퓨터의 기본적인 동작 순환. 컴퓨터가 메모리로부터 프로그램 명령어 집합을 가져오는 과정

    cpu가 컴퓨터가 꺼질 때까지 이러한 순환을 계속 반복한다.

    'TIL' 카테고리의 다른 글

    ssh와 포트포워딩, 그리고 리눅스 권한  (0) 2021.01.08
    2021.01.07 기록장  (0) 2021.01.07
    2021.01.06 기록장  (0) 2021.01.06
    2021.01.05 기록장  (0) 2021.01.05
    2021.01.04 기록장  (0) 2021.01.04

    댓글

Designed by Tistory.