udada
Daisy on April
udada
전체 방문자
오늘
어제
  • 분류 전체보기 (51)
    • Computer Science (19)
      • 웹(Web) (0)
      • SQL (0)
      • 개발자 공부(Developer) (13)
      • 코딩테스트 (5)
    • 소프트웨어 전공 (12)
      • 알고리즘 개론 (0)
      • 컴퓨터 구조 개론 (3)
      • 프로그래밍 언어 (0)
      • 시스템 프로그램 (6)
      • 시스템 프로그래밍 실습 (3)
      • 자바 프로그래밍 실습 (0)
      • 웹 프로그래밍 실습 (0)
    • 스파르타코딩클럽 (0)
      • 웹개발 (0)
    • 프로젝트 (0)
      • URP 프로젝트 (0)
      • ICT 한이음 프로젝트 (0)
      • [CloneCoding] Twitter (0)
    • 경력 (0)
      • IBK 기업은행 (0)
    • News (4)
      • Tech News (3)
      • 경제 신문 스크랩 (0)
    • 독서 (1)
    • 기타 (0)
    • English Expression (9)
    • Motion Graphic (1)
    • Metaverse (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 쿼리
  • query
  • metaverse
  • javascripts
  • front-end
  • SQL
  • 관계형데이터베이스
  • RDBMS
  • CSS
  • HTML
  • sql #rdbms
  • 프론트엔드
  • 웹개발
  • ComputerScience
  • 영어표현
  • 자물쇠효과
  • 메타버스
  • web-dev
  • DigitalWallet
  • 아이폰과갤럭시

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
udada

Daisy on April

[System Program] [1] Data Presentation
소프트웨어 전공/시스템 프로그램

[System Program] [1] Data Presentation

2021. 5. 25. 17:52

[0. Overview]

# compile [.cpp, .h]-> preprocessing [.i, .ii]-> compilation [.s]-> assemble [.o, .obj]-> linking[.exe]

# objdump: object file의 binary data를 확인 가능하게 해주는 리눅스 명령어/ reverse engineer

# 'int's are not integers, 'float's are not reals - finite space 때문(수는 무한하지만, 컴퓨터 자료형의 표현 공간은 유한)

Is x^2 >= 0? int는 4byte에 표현되지 않으면 overflow가 발생

Is (x+y)+z = x+(y+z) ? 

 

[1. Bits and Bytes]

# Boolean Algebra 

Algebraic representaion of logic; TRUE = 1, FALSE = 0

Exclusive-Or (Xor): A와 B가 다른 boolen이면 A^B = 1

Exclusive-Or

> Operations

# Bit-Level Operations in C: &, |, ~, ^

  • 비트 단위 연산

# Logic Operations in C: &&, ||, !

  • TRUE = 0이 아닌 모든 값, FALSE = 0
  • 리턴값은 항상 0 혹은 1
  • if (p && *P); avoid null pointer access

# Shift Operations

  • Left Shift:  x << y
    • arithmetic이랑 logical 모두 0으로 채운다. 
  • Right Shift: x >> y
    • arithmetic은 앞 부호에 맞는 비트로 채우고, logical은 0으로 채운다.

> Machine Words

[64 bits(8 bytes): pointer가 가르키는 주소의 크기]을 사용하는 machine이 증가

 

> Accessing Words in Memory

pointer를 사용하면 address를 하나 가지고 온다. 이 때 주소의 multi byte에서 첫번째 byte를 가르키게 된다.  

 

> Byte Ordering; bytes가 continuos하게 저장되는 방법

# Big Endian; Least significant byte has highest address

# Little Endian; Least significant byte has lowest address - 이걸 더 많이 쓴다. 

Little Endian and Big Endian

 [2. Data Representation - int]

> Unsigned and Signed

Unsigned and Signed Values

#어려워! 시험에 나올 수도 있을 거 같아!!

#이건 뭐지!

 

> Sign Extension - MSB와 같은 비트값으로 sign extension을 시행한다. 

sign extension 방법

# Unsigned Power-of-2 Multiply/Divide with Shift

u << k gives u * 2^k
u >> k gives u / 2^k [logical shift] 0으로 채운다!

# Signed Power-of-2 Multiply/Divide with Shift

Mult: s << k yields s * 2^k Div: s >> k yields s / 2^k [arithmetic shift-right] MSB 값으로 채운다. 

[2. Data Representation - float]

# 시험에 나올 수도 있을거 같아! 10진수 -> 2진수 변환

# Floating Point representation

실수를 '부동소수점'이라는 방식을 통해 표현

s: 부호비트

E: 지수/ exp: E를 인코딩

M: 유효숫자/ frac: M을 인코딩

 

# 인코딩 방법 - exp값에 따라 세가지가 있다.  
1. 정규화 방법 (exp가 0, 1이 아닐 때)

시험에 나올 것 같아! 변환방법


2. 비정규화 방법(exp가 0일 때) - 0에 가까운 굉장히 작은 숫자 표현

이 인코딩은 floating point에서 0을 표시하기 위한 수단이다. floating point에서는 다른 정교한수는 표현해도 0을 표현할 수 없기에 0에 가까운 수를 표현하도록 인코딩한다. 


3. 특수 값(exp가 111....1일 때)

> Dynamic Range

Dynamic Range

> Rounding

# Toward-zero: 소수점 아래를 삭제

# Round-down: 내림

# Round-up: 올림

# Round-to-even: .5(half way)여서 반일때는 짝수로 round한다.

# 시험에 나올지도!

10.00011에서 011은 맨 앞 값이 0이니까 그냥 내리면 된다. -> 10.00

10.00110에서 110은 맨 앞 값이 1이고, 뒤에 추가적으로 1값이 더 있으니까 올리면 된다. -> 10.01

10.11100에서 100은 맨 앞 값이 1이고, half-way이기 때문에 짝수가 되도록(0이 되도록) 만든다. -> 11.00

10.10100에서 100은 맨 앞 값이 1이고, half-way이기 때문에 짝수가 되도록(0이 되도록) 만든다. -> 10.10

 

[[Machine-level-programming]]

[4. Machine-level-programming_Basic]

> Disassembling(기계어 -> 어셈블리어) Object Code: objdump -d sum (sum: 기계어 코드를 담은 실행 파일)

> Alternate Disassembly: gdb sum

> 86-64 Integer Registers

#시험에 나올것 같아!

# Arithmetic Operations

# Arithmetic Operation

[5. Machine-level Programming_procedure]

 

[6. Machine-level Programming_data]

 

[7. Machine-level Programming_advanced]

> Memory Management

> Buffer Overflow

; when exceeding the memory size allocated for an array

It's the #1 technical cause of security vulnerabilities

 

# gets(); buffer overflow를 발생시킬 가능성이 높아서 사용 지양

 

'소프트웨어 전공 > 시스템 프로그램' 카테고리의 다른 글

[System Program] [7] [Virtual Memory]  (0) 2021.05.31
[System Program] [9] Concurrent Programming  (0) 2021.05.31
[System Program] [5] Exceptions and Processes  (0) 2021.05.30
[System Program] [4] Cache Memory  (0) 2021.05.30
[System Program] [3] Memory Hierarchy  (0) 2021.05.29
    '소프트웨어 전공/시스템 프로그램' 카테고리의 다른 글
    • [System Program] [9] Concurrent Programming
    • [System Program] [5] Exceptions and Processes
    • [System Program] [4] Cache Memory
    • [System Program] [3] Memory Hierarchy
    udada
    udada

    티스토리툴바