* 2019.3.19 * ë°°ê²½ ì§€ì‹(?) ë° 1,2ë‹¨ì› ì •ë¦¬ * 현대 ì»´í“¨í„°ì˜ ëŒ€ë¶€ë¶„ì€ í° ë…¸ì´ë§Œ 구조를 ë”°ë¥´ê³ ìžˆìŒ * 프로세서(ALU,ë ˆì§€ìŠ¤í„°), 컨트롤 ìœ ë‹›(CU), 메모리(RAM), 외부 대용량 ì €ìž¥ì†Œ(HDD,SSD), I/O * 컴퓨터 ì‚´ 때 ë ì‚¬ì£ ? * CPU, RAM, 그래픽카드, 모니터/마우스/키보드, 하드디스í¬, SSD 등등 * 기본ì ì¸ êµ¬ì¡°ì¸ í”„ë¡œì„¸ì„œ <-> 메모리를 어떻게 구현했는지 * 컴퓨터 êµ¬ì¡°ì— ëŒ€í•œ 간단한 설명 * CPU,Memory, I/O Devicesê°€ ìžˆê³ ê°ê°ì´ Data bus, Control Bus, Address Busê°€ ì—°ê²°í•˜ê³ ìžˆìŒ * 메모리 계층 * (ë ˆì§€ìŠ¤í„°) -> ìºì‹œ -> ë©”ì¸ ë©”ëª¨ë¦¬(RAM) -> ë³´ì¡° 메모리(HDD,SSD) * ëª…ë ¹ì–´ 실행 ê³¼ì • * (ëª…ë ¹ì–´ ì¸ì¶œ -> 실행) 반복한다 * 파ì´í”„ë¼ì´ë‹ì´ë‚˜ ì¸í„°ëŸ½íЏ ë“±ì˜ ì´ìœ 로 여러 ê³¼ì •ì´ ì¶”ê°€ë˜ê±°ë‚˜ ê³¼ì •ì´ ë‚˜ëˆ ì§ˆ 수 있지만, 기본ì 으로 ì´ë ‡ë‹¤ * 1ë‹¨ì› * 코드 -> (컴파ì¼ëŸ¬) -> 어셈블리 코드 -> (어셈블러) -> 기계어 * 어셈블리어와 기계어는 1:1로 매ì¹ë¨ * 2진수 표현 * 어차피 논리회로 때 다 ë°°ì› ì„ ê²ƒì´ë‹¤ * ì˜¤ë²„í”Œë¡œìš°ì— ëŒ€í•œ 얘기 -> MSB로 들어오는 ìºë¦¬ì™€ 나가는 ìºë¦¬ê°€ 다를 때 * 2ë‹¨ì› * ë°°ê²½ ì§€ì‹ í• ë•Œ í–ˆë˜ ê²ƒë“¤ * 파ì´í”„ë¼ì¸ * 앞서 ì§„í–‰í–ˆë˜ ëª…ë ¹ì–´ 실행 ê³¼ì •ì„ ì—¬ëŸ¬ 개로 나눌 수 ìžˆìŒ * 빨래통->세íƒê¸°->건조기->ì˜·ìž¥ì„ ì˜ˆë¡œ 들어 설명 * x86ì€ ëª…ë ¹ì–´ 실행 단계를 6단계로 나눌 수 있는ë°, ê°ê°ì˜ 실행 단계를 '''물리ì 으로 ë¶„ë¦¬í• ìˆ˜ 있ìŒ''' * ê°ê°ì˜ 단계를 ë³‘ë ¬ì 으로, 6ê°œì˜ ëª…ë ¹ì–´ë¥¼ ë³‘ë ¬ì 으로 ë™ì‹œ 수행하여 ì†ë„/í´ëŸ ì†ë„를 대략 6ë°° ì •ë„ ì¦ê°€ì‹œí‚¬ 수 ìžˆìŒ * 슈í¼ìŠ¤ì¹¼ë¼ (멀티코어 프로세서) * 파ì´í”„ë¼ì´ë‹ 6단계 중 한 단계가 오래 걸린다면, 그것 ë•Œë¬¸ì— í´ëŸ ì†ë„를 늦추는 ê±´ 비효율ì ìž„ * 예를 들어 실행 단계ì—서 ë‘ í´ëŸ ì´ìƒì˜ ì‹œê°„ì´ ê±¸ë¦°ë‹¤ë©´, 실행 단계를 처리하는 ëª¨ë“ˆì„ ì¶”ê°€ë¡œ 배치해서 ì†ë„를 올릴 수 ìžˆìŒ * ex) 실행 단계 처리하는 하드웨어 1ì—는 홀수 번째 ëª…ë ¹ì–´ë§Œ ë³´ë‚´ê³ , ì§ìˆ˜ 번째는 하드웨어 2로 보냄 * 메모리 ì½ê¸° * 1단계: 주소 ë²„ìŠ¤ì— ì½ê³ ìž í•˜ëŠ” 주소가 ì˜¬ë ¤ì§ * 2단계: ë©”ëª¨ë¦¬ì˜ read 플래그가 0으로 ë³€ê²½ë¨ * 3단계: data busì— ê°’ì´ ì½íž˜ * 4단계: ë©”ëª¨ë¦¬ì˜ read 플래그가 1로 ë³€ê²½ë¨ * ìºì‹œ 메모리 * ìºì‹œ 메모리 -> ë©”ì¸ ë©”ëª¨ë¦¬(RAM) -> ë³´ì¡° 메모리(HDD,SSD) * 오른쪽으로 ê°ˆìˆ˜ë¡ ìš©ëŸ‰ 당 가격(현금)ì´ ì €ë ´í•´ì§€ê³ , ì†ë„ê°€ ëŠë ¤ì§ * 1ê°œì˜ í”„ë¡œê·¸ëž¨ì„ ì‹¤í–‰í•˜ëŠ” ìƒí™©ì„ ê°€ì •í•´ë³´ìž * 프로그램 ì „ì²´ê°€ ë©”ì¸ ë©”ëª¨ë¦¬ì— ì˜¬ë¼ê°€ê³ , ì¼ë¶€ë¥¼ ìºì‹œì— ê°€ì ¸ì˜´ * ì°¾ê³ ìž í•˜ëŠ” ë°ì´í„°ê°€ 있으면 ë¨¼ì € ìºì‹œì— 있는지 ë³´ê³ , ì•„ë‹ ë•Œ ë©”ì¸ ë©”ëª¨ë¦¬ì— ì ‘ê·¼í•´ì„œ ê°€ì ¸ì˜´ * ìºì‹œì— ì ‘ê·¼í• ë•ŒëŠ” 1í´ëŸë§Œì— ì ‘ê·¼í• ìˆ˜ 있지만, ë©”ì¸ ë©”ëª¨ë¦¬ì— ì ‘ê·¼í• ë•ŒëŠ” ìˆ˜ì‹ í´ëŸì´ 걸림 * ìºì‹œ Hit ë¹„ìœ¨ì„ ë†’ê²Œ 잡는 게 ì¤‘ìš”í•˜ê² ì£ * 2019.5.25 * 12ë‹¨ì› * float,double ë“±ì˜ ì‹¤ìˆ˜ ê°’ì€ ì»´í“¨í„°ë¡œ 어떻게 ì €ìž¥ë˜ëŠ”ê°€ * ë¨¼ì € 10진수를 표현하는 방법으로 ì ‘ê·¼í•´ë³´ìž * 123.4567ì—서 ê°ê°ì˜ ìžë¦¬ëŠ” 10^2, 10^1, 10^0, 10^-1, 10^-2.... ìžë¦¬ë‹¤ * ë‹¤ìŒ í‘œí˜„ë“¤ì€ ë‹¤ ê°™ì€ ê°’ì´ë‹¤ * 123.4567 * +1.234567e+02 * '''+''' '''1.234567''' * 10^'''2''' * 마지막 표현 방법으로 수를 í‘œê¸°í• ë•Œ, ì–´ë– ì–´ë– í•œ ì •ë³´ê°€ 있으면 수를 í™•ì •í• ìˆ˜ 있ì„까? * 부호 * ìœ íš¨ìˆ«ìž? * 10ì˜ ì§€ìˆ˜ (exponent) * 위 3ê°œì˜ ì •ë³´ê°€ 필요하다는 ê²ƒì„ ì•Œê³ ê°€ìž * 2진수로 표현한 실수를 ë³´ìž * 2진수 101.1011ì€ ê° ìžë¦¬ê°€ 2^2, 2^1, 2^0, 2^-1, 2^-2, 2^-3, 2^-4 * ê°’ì€ 4 + 1 + 1/2 + 1/8 + 1/16ì´ ë˜ê² ì£ ? * 위ì—서 í–ˆë˜ 10진수 표현과 ê°™ì´ ì—¬ëŸ¬ 가지 방법으로 í‘œí˜„í•´ë³´ìž * 101.1011 * '''+'''1.'''011011''' * 2^'''2''' * ì—¬ê¸°ì„œë„ í•„ìš”í•œ ì •ë³´ëŠ” '''sign, fraction, exponent''' * 2진수로 표시하면, ê°’ì´ ì •í™•ížˆ 0ì´ ì•„ë‹Œ 경우는 맨 ì•žì˜ ìˆ˜ê°€ 무조건 1ì´ë‹¤ * 지수는 ìŒìˆ˜ê°€ ë 수 있다 * ì´ 3ê°œì˜ ì •ë³´ë¥¼ 32비트(float) ë˜ëŠ” 64비트(double) ì•ˆì— ë„£ëŠ” 방법? * '''IEEE-754''' * 위ì—서 ë§í•œ, 비트 ì•ˆì— ì •ë³´ë¥¼ ì €ìž¥í•˜ëŠ” ë°©ë²•ì˜ í‘œì¤€ * float * 1비트 sign, 8비트 exponent, 23비트 fraction * double * 1비트 sign, 11비트 exponent, 52비트 fraction * float 기준으로 ì„¤ëª…í•´ë³´ìž * ìœ ì˜í• ì * exponent는 0 ì´í•˜ì˜ ìˆ˜ì¼ ìˆ˜ 있기 때문ì—, 비트 10000000ì´ ê¸°ì¤€ ê°’(0)ì´ ë¨ * ì´ ê°’ë³´ë‹¤ 1씩 ìž‘ì•„ì§ˆìˆ˜ë¡ exponentê°€ ìž‘ì•„ì§€ê³ , ì»¤ì§ˆìˆ˜ë¡ exponentê°€ ì»¤ì§ * ex) 10000011: 지수 3, 01111101: 지수 -2 * 위ì—서 언급한 것처럼, 지수 형태로 í‘œí˜„í–ˆì„ ë•Œ 맨 ì•žì˜ ìˆ˜ëŠ” ì›ëž˜ 수가 0ì´ ì•„ë‹Œ 경우 무조건 1ìž„ * 맨 ì•žì˜ 1ì€ ì €ìž¥í• í•„ìš”ê°€ 없다 * 0ì„ ì €ìž¥í•˜ëŠ” ë°©ë²•ì€ ë’¤ì— ë”°ë¡œ ìžˆìŒ * 방법 * 맨 ì•žì˜ 1ë¹„íŠ¸ì— ë¶€í˜¸ ì €ìž¥(ìŒìˆ˜ë©´ 1, 양수면 0) * ë‹¤ìŒ 8ë¹„íŠ¸ì— ì§€ìˆ˜ ì €ìž¥ (기준:10000000) * 나머지 23ë¹„íŠ¸ì— ì†Œìˆ˜ì ì´í•˜ì˜ 비트 그대로 ì €ìž¥ * ex) 3.25 * 3.75 = 2 + 1 + 0.25 * 2진수로 11.01 = 1.101 * 2^1 * 부호비트: 0 * 지수비트 10000001 * 가수비트 101 * ë”°ë¼ì„œ float로 표현하면 0 10000001 1010000000000....000 * '''컴퓨터구조때 다시 배운다아아'''