Development Book - Computer structure and operating system for self-study

image

참고)

https://github.com/mingseok/os-computer-architecture-reading-study

https://github.com/Dev-Books-Master-Study/computer-architecture-and-operating-system


1-1강 : 컴퓨터 구조를 알아야 하는 이유

  • 문제 해결을 위하여
    • 같은 Code 고, 내 PC에서는 되는데, 다른 사람 PC에서는 안되는 경우가 있음.
    • 프로그래밍 언어의 문법.. 즉 코딩만으로 해결 할 수 없는 문제가 있음.
    • 그럴 때, 손을 놓는게 아니라, 그 PC를 분석의 대상으로 바라보고, 분석하여 문제를 해결하는 능력을 키우기 위함.
    • 즉, 컴퓨터를 관조할 수 있는 능력을 키우기 위해 알아야 함.
  • 성능, 용량, 비용을 위하여
    • 성능, 용량, 비용은 너무 중요한 내용임. 특히 큰 기업으로 갈수록 너무 중요함.
    • 서버를 고를 때 용량, 성능, 가격이 천차만별인데, 무조건 좋은걸 사거나, 무조건 싼 걸 살 수는 없음. 내가 지금 개발하려는 서비스와 고객층을 분석하고, 가장 알맞는 용량 성능 가격의 서버를 구입하고 사용할 것인지를 판단할 줄 알아야 함.
    • 그래서 개발을 할 때 모니터링을 잘 할 줄 알아야하고, 직접 서버PC를 구매하든, 클라우드를 구매하든, 모니터링한 결과를 토대로 필요한 용량 성능 가격을 잘 판단하여 구매할 수 있어야 함.
    • 컴퓨터 구조는 결국 PC의 성능, 용량, 비용에 대한 이야기임.


1-2강. 컴퓨터 구조의 큰 그림

  • 컴퓨터가 이해하는 두 가지 정보
    1. 데이터
      • 숫자, 문자, 이미지 등 정적인 정보
      • 컴퓨터와 주고 받는 내부에 저장된 정보
      • 0, 1로 숫자를 표현하는 방법
      • 0, 1로 문자를 표현하는 방법
    2. 명령어
      • 컴퓨터는 결국 명령어를 처리하는 기계
      • 컴퓨터를 실질적으로 움직이는 정보
      • 데이터는 명령어를 위한 재료 - Ex) 1과 2를 더하라
      • 1, 2는 데이터
      • 더하라는 명령어
  • 컴퓨터의 네 가지 핵심 부품
    • CPU
      • 메모리에 저장된 명령어를 읽고 해석하고 실행한다
      • CPU의 핵심 내부 구성 부품
        • ALU ( 산술논리연산장치 )
          • 계산기
          • 계산을 위한 회로 모음
        • 제어장치
          • 제어 신호를 보내고, 명령어를 해석하는 장치.
          • 제어 신호는 컴퓨터의 부품들을 관리하고 작동시키기 위한 전기 신호를 의미.
          • Ex) 메모리로부터 저장된 값을 읽고 싶을땐 메모리 읽기 라는 제어 신호를, 메모리에 어떤 값을 저장하고 싶을땐 메모리 저장이라는 제어 신호를 보낸다.
        • 레지스터
          • CPU 내부에 있는 내부 저장장치
          • CPU Cache 와는 다르다.
      • Cpu Cache vs 레지스터 ?
        • https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=limitsinx&logNo=222126219627&proxyReferer=
        • https://m.blog.naver.com/sjc02183/221998493348
      • Ex 흐름)
        • cpu의 제어장치가 메모리 속 “1번지”라는 주소에 메모리읽기 라는 제어신호를 보냄.
        • cpu의 레지스터로 메모리 “1번지” 라는 주소에 담겨있던 데이터, 명령어를 가져와서 저장함. ( 시스템 버스를 통해 받음 )
        • 그렇게 불러들인 데이터, 명령어를 cpu 속 제어장치에서 해석함
        • 3번지, 4번지의 데이터가 필요하다는걸 알아내고, 제어장치가 메모리로부터 해당 데이터를 가져옴 ( 시스템 버스를 통해 받음 )
        • ALU 로 해석된 데이터, 명령어를 넘겨서 계산을 시킴
        • 그 결과값을 cpu 레지스터에 저장 시킴
    • 주기억장치 ( RAM or ROM / 메모리 )
      • 프로그램이 실행되려면 메모리에 저장되어 있어야 한다.
      • 현재 실행되고 있는 프로세스의 데이터와 명령어를 저장하는 부품
      • 주소
        • 메모리에 저장 된 데이터나 명령어가 많을텐데, 이 중 원하는걸 특정 해서 꺼낼 수 있게, 그 위치를 알 수 있게 해주는 것.
        • 데이터나 명령어는 각 고유한 주소에 저장된다
    • 보조기억장치
      • 주기억 장치는 보조기억장치보다 비싸고, 휘발성임. 전원이 꺼져도 저장될 기억장치가 필요하였고, 그걸 보조기억장치가 해결해줌
      • 즉, 메모리는 실행할 정보를 저장하고, 보조기억장치는 보관할 정보를 저장함.
      • Disk, SSD, USB 등이 있음.
    • 입출력장치
      • 키보드, 모니터, 마우스 등 컴퓨터 외부에서 컴퓨터와 연결하여 정보를 주고 받는 장치
      • USB는 보조기억장치인가? 입출력장치인가?
        • 둘 다 맞다. 주변 장치, 특별한 입출력 장치라 할 수 있다.
  • 핵심 부품 4가지가 모이는 곳을 “메인보드” 라고 한다. ( 4가지 핵심 부품을 연결해주는 판. 꼽는 곳 )
  • 버스
    • 4가지 핵심 부품이 정보를 주고받을 수 있게 하는 회로, 통로, 길 ( 척추와 같음 )
    • 여러 버스가 있지만, 가장 중요한게 컴퓨터 내부의 정보를 주고 받을 수 있게하는 시스템 버스임.
    • 시스템 버스 회로 안에는 주소버스, 데이터버스, 제어버스가 함께 존재함
      • 주소 버스는 주소가 이동하는 통로
      • 데이터 버스는 데이터, 명령어가 이동하는 통로
      • 제어 버스는 제어 신호가 이동하는 통로


2-1강. 0과 1로 숫자를 표현하는 방법

  • 컴퓨터는 전기신호를 통하여 0과 1만 이해하지 못한다.
  • 비트 : 0과 1을 표현하는 가장 작은 정보 단위
    • 1비트로는 0 또는 1이라는 2가지 정보를 표현할 수 있고
    • 2비트로는 00 01 10 11 이렇게 4가지 정보를 표현할 수 있다.
    • 3비트는 8가지…
    • 이렇게 n비트는 2의 n승만큼의 정보를 표현할 수 있다.
    • 다만 평소에 비트 단위로 뭔가를 표현하지 않는다.
      • 비트, 바이트, 킬로바이트, 메가바이트, 기가바이트, 테라바이트
      • 1바이트 = 8비트
      • 1킬로바이트 = 1000바이트
      • 1메가바이트 = 1000킬로바이트
      • 중요)
        • 1KB = 1000byte
        • 1kiB = 1024byte
        • 1MB = 1000KB
        • 1miB = 1024kiB
        • 이렇게 중간에 i가 들어간 단위가 따로있다. 요즘 혼용해서 쓰기도하지만 이게 맞다.
  • 워드
    • CPU가 한 번어 처리할 수 있는 정보의 크기 단위
    • 하프 워드 : 워드의 절반 크기
    • 풀 워드 : 워드의 크기
    • 더블 워드 : 워드의 두 배 크기
    • Ex ) 해당 CPU가 한 번에 처리 가능한 정보의 크기가 32비트면, 해당 cpu의 워드는 32비트인 것이다.
  • 이진법
    • 0과 1로 수를 표현하는 방법
    • 숫자가 1을 넘어가는 시점에 자리 올림
    • 우리가 일상적으로 쓰는 숫자는 십진법임.
    • 이진법으로 나타낸 수를 이진수라고 함.
    • 표기 방법
      • 1000(2)
      • 0b1000
    • 이진수로 음수를 표현하는 방법
      • 2의보수법
        • 어떤 수를 그보다 큰 2^n에서 뺀 값
        • 쉽게 말하면, 모든 0과 1을 뒤집고 1을 더한 값이다.
        • Ex) 11의 음수는 00 + 1 이므로 01 이다.
        • Ex) 1011의 음수는 0100 + 1이므로 0101 이다.
          • 음수를 양수로 뒤집어도 동일하다.
          • 0101 을 양수로 돌리면 1010 + 1 이므로 1011 이된다.
      • 어떻게 이거만보고 음수인지 양수인지를 구분할 수 있을까?
        • Cpu 내부 레지스터에 flag 레지스터가 있는데, 거기에 현재값이 양수인지 음수인지가 표기가 된다.
        • 그럼 왜 2의보수를 쓰나? 그냥 그 수에 플래그만하면 되는데?
          • 덧셈 한번으로 하드웨어상 뺄셈을 구현할 수 있음
  • 십육진법
    • 이진법으로는 숫자의 길이가 너무 길어짐
    • 이진법과의 양방향 변환이 쉬움.
    • 수가 15를 넘어가는 시점에 자리 올림
    • 0 1 2 3 … 9 A B C D E F 10 11 …
  • 이진수 → 십육진수
    • 4비트가 필요
    • 0001 ( 이게 4비트 )
    • 11010101 을 십육진수로 만들려면 4비트씩 끊어서 변환하면된다.
      • 1101 은 D
      • 0101 은 5 이므로
      • D5이다.
  • 십육진수 → 이진수
    • 4비트가 필요 ( 4비트가 16개의 수를 표현할 수 있기때문 )
    • 1A2B 라는 수가 있다면.
      • 1 A 2 B 를 따로따로 이진수로 만들면 된다.
      • 0001 1010 0010 1011
      • 참고로 이건 4비트x4여서 16비트짤임


2-2강. 0과 1로 문자를 표현하는 방법

  • 문자 집합
    • 컴퓨터가 이해할 수 있는 문자의 모음
    • 예를들어 A라는 PC의 문자 집합에는 a b c 밖에 없음. 그러면 d e f 는 이해 할 수 없음.
    • Ex) 아스키 코드
      • 초창기 문자 집합 중 하나
      • 알파벳, 숫자, 일부 특수문자 및 제어문자 집합
      • 7비트로 하나의 문자 표현
        • 원래는 총 8비트인데, 1비트는 오류검출을 위한 페리티 비트로 사용 됨
      • 총 2^7 인 128개의 문자를 표현 할 수 있음
      • Ex) A는 65, a는 97 로 인코딩
        • 저 65와 97을 이진수로 표현하면 컴퓨터가 이해하는 A와 a가 된다.
        • 여기서 저 65, 97 같은걸 코드 포인트라고 부른다. (문자에 부여된 값.)
      • 장점) 간단한 인코딩
      • 단점) 아스키 코드에는 없는 한국어나 다른 언어, 특수 문자등을 표현 할 수 없음. ( 7비트라서 128가지 뿐 )
        • 그래서 등장한게 언어별 다양한 인코딩 방식임
          • 단, 이러면 다국어 지원 프로그램을 만들려면.. 모든 인코딩 방식을 이해해야 함.
            • 그래서 모든 언어, 특수문자까지 전부 통일된 문자집합인 유니코드와 그 유니코드의 인코딩 방식인 UTF가 등장 함.
        • 그리고 8비트 확장 ASCII 가 나오긴 했지만 그래도 여전히 부족
  • 인코딩
    • 코드화 하는 과정
    • 문자를 0,1로 이루어진 문자코드로 변환하는 과정
    • 한글 인코딩의 특징
      • 한글의 특징을 이해해야 됨.
      • 한글은 초성 중성 종성이 있기에 알파벳과 다름.
      • 그래서 완성형 인코딩, 조합형 인코딩 이렇게 2가지 방식이 존재
        • 완성형 인코딩 방식
          • 초,중,종성으로 완성된 글자 그 자체에 코드를 부여함
          • Ex) 강 : 10101010 11100010 0110100
            • 저 이진수는 예시임. 실제론 저거 아님
        • 조합형 인코딩 방식
          • 초, 중, 종성에 해당하는 자음 모음에 코드를 부여해서 합치는 방식
          • Ex) ㄱ : 1010 ㅏ: 0101 ㅇ:1110
            • 저 이진수는 예시임. 실제론 저거 아님
        • EUC-KR
          • KS X 1001 KS X 1003 문자 집합 기반의 한글 인코딩 방식
          • 완성형 인코딩 방식임
          • 글자 하나 하나에 2바이트 크기의 코드 부여
            • 2바이트 == 16비트 == 4자리짜리 16진수로 표현
              • 가 : b0a0
          • 2300 여개의 한글 표현 가능
            • 여전히 모든 한글을 표현 하기에는 부족
            • 뷃 쉙 휉 등.. 이런 단어가 인코딩이 되지않는 문제가 바로 해당 문자집합에 없기 때문임
        • 유니코드
          • 통일된 문자 집합
          • 한글, 영어, 화살표와 같은 특수 문자, 심지어 이모티콘까지 있음.
          • 현대 컴퓨팅에서 가장 중요한 문자 집합
          • 유니코드의 인코딩 방식
            • utf-8, utf-16, utf-32 …
            • utf-8 에 대하여
              • 가변 길이 인코딩 : 인코딩 결과가 1~4바이트
              • 인코딩 결과가 몇 바이트가 될지는 유니코드에 부여된 값에 따라 다름
                • 0 ~ 007F(16) : 1바이트
                • 0080(16) ~ 07FF(16) : 2바이트
                • 0800(16) ~ FFFF(16) : 3바이트
                • 10000(16) ~ 10FFFF(16) : 4바이트
  • 디코딩
    • 코드를 해석하는 과정
    • 0,1로 이루어진 문자코드를 문자로 변환하는 과정






results matching ""

    No results matching ""