[컴퓨터 시스템] 내용정리 3 (6~7page)

SeHoony·2022년 4월 4일
1

"컴퓨터 시스템 (김형신 옮김)" 책을 바탕으로 정리한 내용이다.

1. 컴파일 시스템이 어떻게 동작하는지 이해하는 것은 중요하다.

: 프로그래머들이 어떻게 컴파일 시스템이 동작하는 이해하는 것은 중요하다.

1-1. 프로그램 성능 최적화

  • 컴파일러 내부 동작을 알 필요는 없으나, 컴파일러가 어떻게 C문장들을 기계어 코드로 번역하는지 알 필요가 있다.
    - 예시1 ) switch문과 if-else문 중 어느 것이 효율적인가?
    - 예시2 ) while문과 for문 중 어느 것이 효율적인가?
  • 필요한 지식 :
    - x86-64기계어(리눅스, 매킨토시, 윈도우 컴퓨터의 기계어)
    - 컴파일러가 어떻게 C 구조를 기계어로 번역하는가?
    - 컴파일러가 소스코드를 더 잘 작동하도록 하는 C프로그램 성능 조절 방법은?
    - 메모리 시스템의 계층적 본성과 C컴파일러가 배열을 메모리에 저장하는 방법은?

1-2. 링크 에러 이해

: 가장 당혹스러운 프로그래밍 에러이며, 큰 규모의 소프트웨어 시스템 빌드 시 자주 발생한다.
- 예시1 ) 링커가 어떤 참조를 풀어낼 수 없다는 것은 뭔가?
- 예시2 ) 정적변수와 전역변수의 차이는?
- 예시3 ) 정적 라이브러리와 동적 라이브러리의 차이는?
- 예시4 ) 왜 링커 관련 에러는 실행 전까지 나타나지 않는가?

1-3. 보안 약점(Security Hole) 피하기

: 버퍼 오버플로우(buffer overflow) 취약성은 인터넷과 네트워크상의 보안 약점의 주요 원인이었다.
: 이런 이슈 때문에 안전한 프로그래밍 입문을 위해, 프로그램 스택에 데이터와 제어 정보가 저장되는 방식으로 발생하는 영향에 대해 이해하는 것이 중요하다.

** 버퍼 오버플로우
: 프로그래밍에서 데이터를 버퍼에 저장할 때, 데이터가 지정한 곳 바깥에 저장되는 것을 의미한다.
: 벗어난 데이터는 인접 메모리를 덮게 되며, 이때 프로그램 변수와 프로그램 흐름 제어 데이터 등이 손상받을 수 있다.
: 이로 인해 잘못된 프로그램 오작동 및 메모리 접근 오류, 잘못된 결과, 프로그램 종료, 또는 시스템 보안 누설이 발생할 수 있다.

profile
두 발로 매일 정진하는 두발자, 강세훈입니다. 저는 '두 발'이라는 이 단어를 참 좋아합니다. 이 말이 주는 건강, 정직 그리고 성실의 느낌이 제가 주는 분위기가 되었으면 좋겠습니다.

0개의 댓글