: : CSAPP 10

[CSAPP] Ch 9. 가상메모리 : (1) 물리 및 가상주소 방식

0. Intro 제한된 자원인 물리메모리를 보다 효율적이게 관리하기 위해서 현대의 시스템은 가상메모리라는 메모리의 추상화를 제공한다.가상메모리는 각 프로세스에 하나의 크고 통합된, 사적 주소공간(가상메모리)를 제공한다.​   가상메모리의 중요한 기능 세가지     1. 메인메모리를 디스크에 저장된 주소공간에 대한 "캐시"로 취급하여, 메인메모리를 효과적으로 사용한다.    2. 각 프로세스마다 통일된 주소공간을 제공하여 메모리 관리를 단순화한다.    3. 각 프로세스의 주소공간을 다른 프로세스에 의한 손상으로부터 보호한다.    1. 물리 및 가상주소 방식   9.1 물리 및 가상주소 방식   컴퓨터의 메인메모리(RAM)은 M개의 연속적인 바이트 배열로 구성된다.  각 바이트는 "물리주소(PA)" 라고..

: : CSAPP 2024.05.30

[CSAPP] Ch 3. 프로그램의 기계수준 표현 : (6) 제어문

3.6  제어문   3.6.1  조건코드   앞서 보았듯, CPU에는 정수 레지스터와 함께 가장 최근의 산술 또는 논리연산의 특성을 설명하는 레지스터들을 운영한다.CF: 캐리플래그(carry flag). 가장 최근의 연산에서 가장 중요한 비트로부터 올림이 발생한 것을 표시→비부호형 연산에서 오버플로우를 검출ZF: 영플래그 (Zero flag). 가장 최근 연산의 결과가 0인것을 표시SF: 부호 플래그 (Sign flag). 가장 최근 연산이 음수를 생성한것을 표시OF: 오버플로우 플래그 (Overflow flag). 가장 최근 연산이 2의 보수 오버플로우를 발생시킨 것을 표시→ 부호형 연산에서 오버플로우를 검출​​다른 레지스터들은 변경시키지 않으면서 조건 코드만 변경해 주는 두 개의 인스트럭션이 있다. ..

: : CSAPP 2024.03.19

[CSAPP] Ch 3. 프로그램의 기계수준 표현 : (5) 산술연산과 논리연산

3.5  산술연산과 논리연산    3.5.1  유효주소 적재 (Load Effective Address)    leaq는 movq와 유사하나, leaq는 포인터를 생성하기 위해 사용된다는 차이가 있다. 즉, leaq 는 실제 데이터를 읽어오는게 아니라, 메모리의 주소자체 혹은 주소계산값을 가져온다.​  이 명령어는 가리키는 위치에서 읽기를 수행하는 대신 '유효주소'를 목적지에 복사한다. 그래서 목적 오퍼랜드에는 반드시 레지스터만 올 수 있다.    3.5.2  단항 및 이항 연산  여기서 단항연산은 c언어에서 i++ 과 같은 자기 혼자서도 연산이 가능한 연산, 이항연산은 a+=c 같은, 다른 항이 존재해야 하는 연산이다. 이항연산에서 두번째 오퍼랜드는 소스이면서 목적지로 사용된다.  소스에는 상수, 레지..

: : CSAPP 2024.03.19

[CSAPP] Ch 3. 프로그램의 기계수준 표현 : (4) 정보 접근하기

3.4  정보 접근하기   x86-64 CPU 는 64bit 값을 저장할 수 있는 16개의 범용 레지스터를 보유하고 있다. 이 레지스터들은 정수 데이터와 포인터를 저장하는데 쓰인다. 64bit로 확장하면서 8개의 새로운 레지스터들이 추가되었으며, %r8 ~ %r15라 칭한다. 레지스터 관련 참고 :x86-64 CPU 레지스터(Register) 종류, 32bit / 64bit 비교 (tistory.com)   중첩된 사각형이 보여주듯, 인스트럭션들은 16개의 레지스터 하위 바이트들에 저장된 다양한 크기의 데이터에 대해 연산할 수 있다. 바이트수준 연산들은 가장 덜 중요한 바이트에 대해 연산을 할 수 있으며, 16비트 연산들은 가장 덜 중요한2바이트에 접근하고, 32비트 연산은 덜 중요한 4바이트에, 64비..

: : CSAPP 2024.03.19

[CSAPP] Ch 3. 프로그램의 기계수준 표현 : (3) 데이터의 형식

3.3  데이터의 형식   인텔 프로세서들이 처음에는 16비트 구조를 사용했기 때문에, 워드라는 단어를 16비트 데이터 타입을 말할 떄 사용한다. 32비트는 '더블워드' , 64비트는 '쿼드워드' 라고 부른다.       • 포인터 : 64bit 머신에선 예상대로 8byte 쿼드워드로 저장됨.      • 부동소수점 : x86계열에서 특별히 10byte 부동소수점 형식 연산을 구현하였으나, 호환성과 성능을 고려하여 이용하지 않는 것이 좋다.   여기서 주목할 점은, 포인터 char * 은 쿼드워드로 표현된다는 것 → 모든 포인터가 다 q로 표현된다.  이 데이터의 형식이 각 인스트럭션의 접미사로 붙여쓰이게 된다.  예를 들면 movb (바이트이동), movw (워드이동), movl (더블워드 이동), m..

: : CSAPP 2024.03.19

[CSAPP] Ch 3. 프로그램의 기계수준 표현 : (2) 프로그램의 인코딩

3.2  프로그램의 인코딩   GCC컴파일러를 통해 컴파일을 진행하면(커맨트 라인 옵션으로 -Og) 최적화 수준을 적용한다.  일반적으로 최적화 수준을 올리면 최종 프로그램은 더 빨리 동작하지만, 컴파일 시간이 증가하고 디버깅 도구를 실행하기 어려워질 위험이 있으며 만들어진 코드가 기존의 C코드에 비해 너무 많이 변경되어 본래 코드와 기계어 코드간의 관계를 이해하기 어렵게된다.   이러한 GCC 명령은 소스코드를 실행코드로 변환하기 위해 일련의 프로그램들을 호출한다. 앞서 1장에서 보았듯이, 전처리기, 컴파일러, 어셈블러, 링커까지 호출하게 된다.    3.2.1  기계수준 코드   컴퓨터 시스템은 보다 간단한 추상화 모델을 이용해서 세부구현내용은 감추며 추상화의 다른 형태를 사용하고 있다. 이들 중 "..

: : CSAPP 2024.03.19

[CSAPP] Ch 3. 프로그램의 기계수준 표현 : (1) 역사적 관점

Ⅲ. 프로그램의 기계수준 표현   3.0  Intro   GNU GCC C 컴파일러는 어셈블리 코드의 형태로 출력을 만들어 프로그램의 각 인스트럭션을 만들어낸다.대개의 경우 고급 언어가 제공하는 추상화를 사용하는 것이 보다 더 생산적이고 안정적이다. 반면에 어셈블리 코드는컴퓨터 기계에 매우 의존적이기 때문에(회사마다 쓰는 어셈블리 셋이 약간씩 다르다) 컴퓨터 기계에 매우 의존적이라 할 수 있다. 특히 기계어 자체도 CPU가 채택하는 ISA(명령어셋)에 따라 다 다르기 때문에 어셈블리어의 명령어 역시 통일된 규격이 없다. 그렇다면 왜 어셈블리 코드를 알 면 좋을까?     1.  컴파일러의 최적화 성능을 알수있다.     2.  코드에 내재된 비효율성을 분석 가능하다.     3.  시스템의 취약성이 어떻..

: : CSAPP 2024.03.19

[CSAPP] Ch 2. 정보의 표현과 처리 : (2) 정수의 표시

2.0 Intro 이 절에선 정수를 인코딩하기 위해 사용할 수 있는 두 가지 방법 (양수만 표시할 수 있는 방법과, 음수, 0, 양수 모두를 표시할 수 있는 방법) 에 대해 설명한다. 나중에 이들이 수학적 특성, Low-Level 수준을 볼 때 매우 연관되어있음을 알게 될 것이다. 그리고 인코딩된 정수를 다른 길이의 표현에 맞도록 조절하기 위해 확장하거나 축소하는 효과에 대해서도 살펴본다. 2.1 정수형 데이터 타입 2.1.1 C의 다양한 정수형 데이터 타입 아래 두 그림에는 전형적인 32bit와 64bit 프로그램들에서 이들이 갖는 값의 범위를 나타내었다. 각 타입은 unsigned로 선언되어 표시된 숫자가 모두 양수인지, 아니면 기본타입으로 음수도 나타낼 수 있는지 뿐만 아니라 키워드 char, sh..

: : CSAPP 2023.12.14

[CSAPP] Ch 2. 정보의 표현과 처리 : (1) 정보의 저장

Ⅱ. 정보의 표현과 처리   2.0. Intro   현대의 컴퓨터는 두 개의 값을 갖는 신호로 표현되는 정보를 저장하고 처리한다. 이진수인 비트는 디지털 혁명의 근원인다. 이 비트들을 묶어서 가능한 다른 비트 패턴에 의미를 부여하도록 특정 해석방법을 적용하면(PCM), 어떤 유한집합의 원소들을 표시할 수 있게 된다.   이 장에서는 세 개의 가장 중요한 숫자 표현에 대해 살펴본다.    비부호형 인코딩 : 어떤 연산의 경우에는 그 결과값이 표시할 수 없을 정도로 커서 오버플로우를 발생시킬 수 있다.   2의 보수 인코딩 : 양수, 또는 음수값을 같는 부호형 정수를 표시하는 가장 일반적인 방법이다.    예상된 결과를 컴퓨터가 만들어 내지 않았을지는 몰라도, 적어도 일관된 결과를 만든다.   부동소수점 인..

: : CSAPP 2023.12.14

[CSAPP] Ch 1. Prologue : A Tour of Computer System

Ⅰ. 컴퓨터 시스템으로의 여행 (A Tour of Computer Systems)   1.0  Intro    컴퓨터 시스템은 하드웨어와 시스템 소프트웨어로 구성되며, 이들과 함께 작동하여 응용 프로그램을 실행한다. 시간이 지남에 따라 시스템의 구현 방법은 바뀔 수 있지만, 근본적인 개념들은 변하지 않는다. 모든 컴퓨터 시스템들은 유사한 기능을 수행하는 유사한 하드웨어와 소프트웨어 컴포턴트를 가지고 있다.   여러분이 컴퓨터 시스템, 그리고 시스템이 응용프로그램에 미치는 영향을 이해한다면 보기 드문 "파워 프로그래머"가 되는 길로 향하게 될 것이다.    시스템에 관한 공부의 시작은 hello 프로그램이 시스템에서 실행되고, 단순한 메시지를 출력하고, 종료될 때까지의 수명주기를 추적하는 것으로 시작한다...

: : CSAPP 2023.10.18