수안이의 컴퓨터 연구실

  • Mainpage
  • About Me
  • Tags
  • Metapage
  • Notice
  • Location
  • Keywords
  • Guestbook
  • Admin
  • Write an Article
  • Total | 1693789
  • Today | 140
  • Yesterday | 588

Programming/Assembly2005/07/31 20:00

편견이 깨지는 어셈블리 프로그래밍 - 최적화 강좌 1 - 1

최재영 (rok828@yahoo.co.kr)

아무리 하드웨어가 발전한다 해도 높아진 사용자의 눈을 따라 올 수는 없었다. 개발자들은 사용자를 더 만족시키기 위해 하드웨어의 모든 자원을 짜내지 않으면 안 되었고, 그로 인해 부각되는 분야 중 하나가 바로 최적화이다. 멀고도 어렵게 느껴진 최적화, 관련 툴의 발전으로 더 이상 일부 프로그래머들의 전유물이 아니다. 어떤 것을 공략하기 전에 먼저 대상을 잘 파악해야 한다. 따라서 이번 호부터는 달라진 어셈블리와 PC의 심장인 CPU를 공략해보자.


이강좌는 어렵게만 생각해왔던 최적화에 고급스럽게 변모한 어셈블러를 이용해 더 쉽게 접근해 보자는 취지로 시작한 강좌이다. 일반적으로 ‘최적화’라는 단어가 나오면 ‘어렵다!’, ‘자료가 부족하다’, ‘컴파일러에서 지원해주는 것이 아니냐?’ 등의 이야기를 많이 한다. 하지만 조금만 관심을 가지고 시스템을 이해한다면 아주 쉬운 방법으로 최적화된 코드를 작성할 수 있다. 현재 우리가 쓰는 고급 언어들의 컴파일러는 많은 사람들의 노력과 기술의 발전으로 상당히 최적화되어 있다. 하지만 CPU에 특성화되지 않은 범용 언어인 만큼 상황 설정에 맞춘 알고리즘에 의하여 생성된 실행 코드로는 최적화에 한계가 있을 수 있다. 이런 부족한 점을 보완하기 위해 어셈블러 역시 공부할 필요가 있다.
이번 연재는 CPU에 대한 설명인 만큼 CPU 명령과 거의 일대일로 매칭되는 어셈블러를 비중 있게 다룰 것이다. 어셈블리하면 매우 어렵고 쓰기 불편한 언어로 인식되어 왔지만 MASM이 버전 6.0대에 들어서면서 매우 편리하고 고급적인 기능이 추가되었으며 고급 언어와의 연결 또한 용이해지게 되었다. 따라서 여기서는 MASM 7.0 버전을 위주로 설명해 나갈 것이고, 이 컴파일러는 http://www.asmlove.co. kr에서 다운받을 수 있다.

펜티엄 내부 블럭도
코드의 최적화란 해당 CPU의 특성을 가장 잘 이해하고 코드를 작성하는 것이다. 그렇다면 컴퓨터에서 가장 핵심적인 부분인 CPU에 대해 알아 볼 필요가 있다. <그림 1>은 펜티엄의 블럭 다이어그램을 나타낸 것이다. 이 구조를 크게 기능별로 크게 4가지 유닛(Unit)으로 나눌 수 있다.

◆ 메모리 서브시스템
메모리 서브시스템(memory subsystem)은 노스 브릿지(north bridge)라는 메인 버스 컨트롤러(main bus controller)와 연결해주는 시스템 버스(system bus), 버스 인터페이스 유닛(bus interface unit)과 데이터의 원활한 흐름을 위해 L2 캐시, 인스트럭션 캐시(instruction cache, L1), 데이터 캐시(date cache, L1), 메모리 인터페이스 유닛(memory interface unit) 그리고 메모리 레코더 버퍼(memory reorder buffer)로 구성되어 있다.

◆ 페치/디코더 유닛
인스트럭션 페치 유닛(instruction fetch unit), 브랜치 타겟 버퍼(branch target buffer), 인스트럭션 디코더(instruction decoder), 마이크로코드 시퀀서(microcode sequencer), 레지스터 알리아스 테이블(register alias table)로 구성되어 있다. 이 부분은 실행 유닛이 효율적으로 수행할 수 있게 하기 위해 알맞은 규격의 명령을 가공하는 부분이다. CPU에 대한 최적화는 이 부분을 얼마나 잘 이해하고 활용하느냐 하는 것인데, 이에 관하여 이번 강좌에서 자세하게 다루겠다.

◆ 인스트럭션 풀(instruction pool) 또는 레코더 버퍼(reorder buffer)

◆ 디스패치/실행 유닛(dispatch/execute unit)
이 부분이야 말로 실질적인 명령의 수행이 이뤄지는 곳이다. 이 부분은 실행 가능한 파이프에 명령을 분배하기 위한 예약 스테이션(reservation station)과 두 개의 정수 처리 유닛과 하나의 부동 소수점 유닛 두 개의 주소 번역기 유닛과 두 개의 병렬 데이터 처리 유닛을 포함하고 있다

◆ 리타이어먼트 유닛(retirement unit)
명령어 수행이 최종적으로 끝나는 곳이다.
"Assembly" 카테고리의 다른 글
  • 편견이 깨지는 어셈블리 프로그래밍 - 최적화 강좌... (0)2005/07/31
  • 편견이 깨지는 어셈블리 프로그래밍 - 최적화 강좌... (0)2005/07/31
  • 편견이 깨지는 어셈블리 프로그래밍 - 최적화 강좌... (0)2005/07/31
  • 편견이 깨지는 어셈블리 프로그래밍 - 최적화 강좌... (0)2005/07/31
  • 편견이 깨지는 어셈블리 프로그래밍 - 최적화 강좌... (0)2005/07/31
2005/07/31 20:00 2005/07/31 20:00
Posted by webdizen
No Trackback No Comment

Trackback URL : http://www.webdizen.net/blog/trackback/1292

Leave your greetings.

[로그인][오픈아이디란?]

«Prev  1 ... 1833 1834 1835 1836 1837 1838 1839 1840 1841 ... 3009  Next»

RSS HanRSS
Blog Image
webdizen
이곳은 컴퓨터에 대해 연구하고, 공유하고, 소통하기 위한 연구실입니다. 개인적으로는 OLAP, Data Mining, Semantic Web, Data Modeling에 대해서 연구하고 있습니다.

Categories

전체 (3009)
Webdizen (141)
Life (6)
Diary (16)
Blog (9)
IDEA (2)
Travel (10)
Book (16)
Photo (7)
Movie (8)
Music (14)
Leisure Sports (10)
Funny (6)
Hardware (121)
Software (120)
Windows (5)
Unix & Linux (120)
Installation (5)
Kernel (10)
System (34)
Develop (22)
X-Window (0)
Applicaton (31)
Security (4)
Framework (2)
Hadoop (2)
Programming (804)
Algorithm & Data Structure (1)
Assembly (38)
UNIX/Linux C (95)
C++ (128)
STL (4)
Java (38)
Win32 API (92)
ATL/COM (44)
MFC (151)
.NET (26)
WCF/WPF (4)
C# (28)
Network Programming (17)
Database Programming (12)
OpenGL / DirectX (13)
Multimedia Programming (0)
Game Programming (21)
Parallel Distributed Progra... (0)
Reverse Engineering (0)
Debugging (9)
Python (1)
Ruby (1)
Ruby on Rails (1)
QT (4)
GTK (0)
JSP (0)
PHP (6)
ASP.NET (6)
ASP (2)
Development (28)
Useful Library (2)
Data Modeling (0)
Database (105)
Oracle (4)
MSSQL (41)
MySQL (2)
Data Warehouse (2)
Data Mining (4)
Network (66)
Web (79)
DHTML (4)
XHTML (1)
Javascript (1)
CSS (1)
AJAX (9)
XML (11)
Flex (1)
Silverlight (3)
Security (91)
DoS (1)
Kernel (10)
Scanning (3)
Sniffing (0)
Spoofing (4)
Overflow (28)
Web (11)
Shell (10)
Format String (14)
Window (2)
Embedded (70)
Multimedia (27)
Mobile (14)
Graphic (24)
Management (633)
Knowledge (581)
Hadoop (0)

Notice

  • 메타 블로그 사이트에 등록
  • 새해 맞이 블로그의 변화
  • 블로그 명칭 변경
  • 도메인(www.webdizen.net) 구...
  • TEXTCUBE 1.6.1로 업그레이드...

Tags

  • 마드리드
  • 몰입
  • FTP
  • JSP
  • 복원
  • lynx
  • IIS7
  • 프로세서 정보
  • 계산기
  • 필기도구
  • INI 파일
  • 포인터
  • 시바스
  • 가속키
  • Dll
  • 마이그레이션
  • 안전한 프로그래밍
  • Adobe
  • 춘천캠퍼스
  • 유닉스

Recent Articles

  • 트위터(Twitter)의 시작!.
  • 청년 리더의 조건.
  • 애플의 타블렛 PC - 아이패드....
  • 미래의 인터페이스 - 육감 기....
  • 기초발성법 동영상 강좌.

Recent Comments

  • 학교 과제물중 쓰레드에 대하....
    장진혁 03/17
  • 관리자만 볼 수 있는 댓글입....
    비밀방문자 03/12
  • 상대방의 이야기를 열심히 경....
    DoNuts 03/03
  • Lots of students know techn....
    Bobbi35Shannon 02/25
  • 좋은글 잘 보고 갑니다..
    Und_hacker 01/08

Recent Trackbacks

  • printf,scanf를 이용한 형식....
    yundream의 프로그래밍 이야기 03/10
  • 파일 열기/저장하기 CFileDialog.
    은마군의 나태블록 2009
  • World IT Show 2008.
    상우 :: Oranzie's BLOG 2008
  • cvs서버 설치하기.
    3인3색 2008
  • 속속 공개되는 Google Chart....
    PHP와 Web 2.0 2007

Archive

  • 2010/02 (1)
  • 2010/01 (6)
  • 2009/12 (5)
  • 2009/09 (3)
  • 2009/08 (1)

Calendar

«   2010/03   »
일 월 화 수 목 금 토
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      

Bookmarks

    • Administration
      • IIS.NET
      • NTFAQ
      • OS의 모든 것
      • 리눅스포털
    • Database
      • SQL Server Central
      • SQL Team
    • Development
      • .NET Heaven
      • ASP Alliance
      • ASP.NET 2.0
      • Bullog.net
      • C# Corner
      • C++ (C PlusPlus.com)
      • C++ Reference
      • CodeGuru
      • CodePlex
      • DebugLab
      • Dev Articles
      • Devpia
      • DotNet Junkies
      • DotNet Zone
      • Driver Online
      • GOSU.NET
      • HOONS 닷넷
      • Joinc 팀블로그
      • KOSR
      • MSDN Home Page
      • OSR Online
      • Sky.ph - 개발자 커뮤니...
      • TAEYO.NET
      • The Code Project
      • WindowsClient.net
      • 김상욱의 개발자 Side
      • 조인시 위키
    • Human Networks
      • belief21c's e-space
      • I think I can
      • Invisible Rover's Blog :D
      • Rodman®
      • ■ Feel So Good~! ■
      • 까만 나비
      • 나를 가꾸는 시간.
      • 나만의 즐거움~~!
      • 단녕
      • 상우 :: Oranzie's BLOG
    • Information Technology
      • Microsoft TechNet
      • 지디넷코리아 - 글로벌...
    • Security
      • FoundStone
      • milw0rm
      • NewOrder
      • OpenRCE
      • Phrack.org
      • Reverse Engineering b1...
      • Reverse Engineering Team
      • RootKit
      • SecurityFocus
      • SecurityXploded by Nag...
      • Wow Hacker
      • Zone-H
Textcube
Louice Studio Inc.
Powered by Textcube. Original designed by Tistory.