More

    [기본상식] 프로그래밍 입문 전 알고 가면 좋은 상식

    CPU (Central Processing Unit)

    중앙 처리 장치(CPU)는 컴퓨터의 두뇌라고 할 수 있습니다. CPU는 메모리에서 명령어를 검색하고 실행합니다. 일반적으로 CPU는 제어 유닛과 산술/논리 유닛이라는 두 가지 구성 요소로 이루어져 있습니다. 제어 유닛은 다른 구성 요소의 동작을 제어하고 조정하며, 산술/논리 유닛은 숫자 연산(덧셈, 뺄셈, 곱셈, 나눗셈)과 논리 연산(비교)을 수행합니다.

    CPU는 수백만 개의 작은 전기 스위치인 트랜지스터가 포함된 작은 실리콘 반도체 칩에 구축되어 있습니다. 이 트랜지스터들은 정보를 처리하는 데 사용됩니다. 내부 클럭을 통해 일정한 속도로 전자 펄스를 발생시킵니다. 이 펄스들은 작업의 속도를 제어하고 동기화하는 데 사용됩니다.

    CPU의 펄스는 클럭펄스(Clock Pulse)라고도불리며, 컴퓨터 시스템 내의 모든 동작을 동기화하는 역할을 합니다. 클럭 펄스는 수정 발진자(Crystal Oscillator)의 규칙적인 진동에 의해 발생하는 일정한 간격을 갖는 전자적인 펄스입니다.

    컴퓨터의 시스템 클럭(CPU 클럭)은 이 펄스를 타이밍 펄스 또는 디지털 신호로 사용합니다. 클럭 펄스의 발생 주기(Cycle)를 클럭 속도 또는 클럭 주파수라고 합니다. 클럭 펄스는 컴퓨터에서 매우 중요한 역할을 합니다. 이는 CPU가 명령어를 얼마나 빨리 처리할 수 있는지를 결정하는 주요 요소 중 하나입니다. 클럭 속도가 높을수록 CPU는 주어진 시간 동안 더 많은 명령어를 실행할 수 있습니다.

    더 높은 클럭 속도는 주어진 시간 동안 더 많은 명령어를 실행할 수 있게 합니다. 클럭 속도의 측정 단위는 헤르츠(Hz)로, 1헤르츠는 1초에 1펄스를 의미합니다. 예전에는 컴퓨터의 클럭 속도를 메가헤르츠(MHz)로 측정했지만, CPU 속도는 계속해서 향상되고 있으며, 현재 컴퓨터의 클럭 속도는 일반적으로 기가헤르츠(GHz)로 표시합니다.

    CPU는 원래 하나의 코어만으로 개발되었습니다. 코어는 프로세서의 일부로, 명령어를 읽고 실행하는 작업을 수행합니다. CPU 처리 능력을 높이기 위해, 칩 제조사들은 현재 여러 개의 코어를 포함하는 CPU를 생산하고 있습니다. 멀티코어 CPU는 두 개 이상의 독립적인 코어를 가진 단일 구성 요소입니다.


    비트와 바이트

    컴퓨터에서의 최소 저장 단위는 바이트(Byte)입니다. 바이트는 8비트로 구성되며 4와 같은 작은 숫자는 단일 바이트로 저장될 수 있습니다. 단일 바이트에 들어갈 수 없는 숫자를 저장하기 위해 컴퓨터는 여러 바이트를 사용합니다. 숫자와 문자 등 다양한 종류의 데이터는 일련의 바이트로 인코딩됩니다. 프로그래밍을 할 때 데이터의 인코딩과 디코딩은 컴퓨터 시스템이 인코딩 체계에 따라 자동으로 수행합니다. 인코딩 체계는 컴퓨터가 문자, 숫자, 기호를 실제로 작업할 수 있는 데이터로 변환하는 방법을 지배하는 규칙의 집합입니다. 대부분의 체계는 각 문자를 미리 정해진 비트 문자열로 변환합니다.

    컴퓨터에서 데이터와 프로그램등의 정보가 어떻게 저장되는지 살펴봅시다. 컴퓨터는 너무 똑똑(?)해서 0과 1의 값만으로도 모든 연산을 수행합니다. 0과 1은 우리가 흔히 생각하는 스위치라고도 생각할 수 있습니다. 컴퓨터에서 정보를 저장하는 것은 각 스위치의 상태로 보면 스위치가 켜지면 1, 꺼지면 0으로 이 0과 1은 이진 숫자 체계에서 숫자로 해석되며, 비트(binary digits)라고 불립니다.

    우리가 흔히 사용하는 ACII 코드의 문자 ‘A’는 한 바이트로 2진 01000001로 표현됩니다. 이러한 방식을 통해 컴퓨터는 문자, 숫자, 기호 등을 이진 데이터로 변환하여 처리합니다.

    또한 컴퓨터 저장 용량은 다음과 같이 바이트와 바이트의 배수로 측정됩니다.

    1Byte (바이트) : 컴퓨팅 및 디지털 통신에서의 기본 정보 단위입니다.
    1KB (킬로바이트) : 1024 바이트와 같습니다.
    1MB (메가바이트) : 1024 킬로바이트 또는 1,048,576바이트와 같습니다.
    1GB (기가바이트) : 1024 메가바이트, 1,048,576킬로바이트, 또는 1,073,741,824바이트와 같습니다.
    1TB (테라바이트) : 1024 기가바이트, 1,048,576메가바이트, 1,073,741,824킬로바이트, 또는 1,099,511,627,776바이트와 같습니다.
    1PB (페타바이트) : 1024 테라바이트, 1,048,576기가바이트, 1,073,741,824메가바이트, 1,099,511,627,776킬로바이트, 또는 1,125,899,906,842,624바이트와 같습니다.

    이런 식으로 계속되며, 각 단위는 이전 단위의 1024배입니다. 이는 디지털 시스템에서 데이터 저장의 이진 특성 때문입니다. 그러나 어떤 상황에서는 이들 단위가 10진수를 사용하여 정의되므로 메가바이트는 1000 킬로바이트, 기가바이트는 1000 메가바이트 등이 됩니다. 이는 하드 드라이브 저장 공간 및 데이터 전송 속도와 같은 분야에서 더 일반적입니다. 그러나 대부분의 컴퓨팅 상황에서는 1 킬로바이트가 1024 바이트인 2진수 정의가 사용됩니다.

    이것들은 디지털 저장 용량의 표준 측정 단위이지만, 실제 저장 공간은 특정 시스템 또는 장치 구성에 따라 다를 수 있습니다. 예를 들어, 일부 공간은 시스템 파일 및 복구 파티션을 위해 예약될 수 있습니다.

    일반적인 한 페이지 워드 문서는 대략 20 KB의 저장 공간을 차지할 수 있습니다. 이는 문서의 내용, 즉 포함된 이미지나 기타 미디어의 수에 따라 다를 수 있습니다.

    1 MB(1024 KB)는 약 50 페이지의 워드 문서를 저장할 수 있습니다.
    (1024KB÷20KB=51.2 : 가장 가까운 정수로 내림, 이미지/미디어 등은 +용량)
    1 GB(1024 MB)는 약 50,000 페이지의 워드 문서를 저장할 수 있습니다.
    (1024MB×50Pages=51,200 : 가장 가까운 정수로 내림, 이미지/미디어 등은 +용량)

    일반적인 두 시간 고해상도 영화는 대략 8 GB의 저장 공간을 차지할 수 있습니다. 이는 영화의 해상도, 비트레이트, 인코딩에 따라 다를 수 있습니다.

    20편의 영화를 저장하려면 160 GB가 필요합니다.
    (20편×8GB=160)

    대략적인 추정치며 Meta 데이터나 실제 유휴 저장 용량 등 많은 요인에 따라 달라질수 있지만 대부분 이런식으로 용량을 산출할 수 있습니다. 


    진수변환

    아래는 각 ASCII, 10진수, 16진수, 8진수, 2진수 값 사이의 변환표를 한눈에 볼수 있습니다.

    ASCII 코드에서 대문자 ‘A’ 10진수 65, 소문자 ‘a’ 10진수 97정도는 외워주는게 좋습니다. 간혹 프로그래밍 관련 시험에 출제되므로 꼭 알아두도록 합니다.

    ASCII10진수16진수8진수2진
    널(null)0000
    헤더 시작1111
    텍스트 시작22210
    텍스트 끝33311
    전송 종료444100
    조회555101
    응답666110
    777111
    백스페이스88101000
    가로 탭99111001
    줄 바꾸기10A121010
    수직 탭11B131011
    용지 넘김12C141100
    캐리지 리턴(CR)13D151101
    시프트 아웃14E161110
    시프트 인15F171111
    데이터 링크 이스케이프16102010000
    장치 제어 1/Xon17112110001
    장치 제어 218122210010
    장치 제어 3/Xoff19132310011
    장치 제어 420142410100
    부정 응답21152510101
    동기식 유휴22162610110
    전송 블록의 끝23172710111
    취소24183011000
    미디어 끝25193111001
    파일의 끝(EOF)/대체261A3211010
    이스케이프271B3311011
    파일 구분자281C3411100
    그룹 구분자291D3511101
    레코드 구분자301E3611110
    단위 구분자311F3711111
    공백322040100000
    !332141100001
    342242100010
    #352343100011
    $362444100100
    %372545100101
    &382646100110
    392747100111
    (402850101000
    )412951101001
    *422A52101010
    +432B53101011
    ,442C54101100
    452D55101101
    .462E56101110
    /472F57101111
    0483060110000
    1493161110001
    2503262110010
    3513363110011
    4523464110100
    5533565110101
    6543666110110
    7553767110111
    8563870111000
    9573971111001
    :583A72111010
    ;593B73111011
    <603C74111100
    =613D75111101
    >623E76111110
    ?633F77111111
    @64401001000000
    A65411011000001
    B66421021000010
    C67431031000011
    D68441041000100
    E69451051000101
    F70461061000110
    G71471071000111
    H72481101001000
    I73491111001001
    J744A1121001010
    K754B1131001011
    L764C1141001100
    M774D1151001101
    N784E1161001110
    O794F1171001111
    P80501201010000
    Q81511211010001
    R82521221010010
    S83531231010011
    T84541241010100
    U85551251010101
    V86561261010110
    W87571271010111
    X88581301011000
    Y89591311011001
    Z905A1321011010
    [915B1331011011
    \925C1341011100
    ]935D1351011101
    ^945E1361011110
    _955F1371011111
    `96601401100000
    a97611411100001
    b98621421100010
    c99631431100011
    d100641441100100
    e101651451100101
    f102661461100110
    g103671471100111
    h104681501101000
    i105691511101001
    j1066A1521101010
    k1076B1531101011
    l1086C1541101100
    m1096D1551101101
    n1106E1561101110
    o1116F1571101111
    p112701601110000
    q113711611110001
    r114721621110010
    s115731631110011
    t116741641110100
    u117751651110101
    v118761661110110
    w119771671110111
    x120781701111000
    y121791711111001
    z1227A1721111010
    {1237B1731111011
    |1247C1741111100
    }1257D1751111101
    ~1267E1761111110
    DEL1277F1771111111
     1288020010000000
     1298120110000001
     1308220210000010
     1318320310000011
     1328420410000100
     1338520510000101
     1348620610000110
     1358720710000111
     1368821010001000
     1378921110001001
     1388A21210001010
     1398B21310001011
     1408C21410001100
     1418D21510001101
     1428E21610001110
     1438F21710001111
     1449022010010000
     1459122110010001
     1469222210010010
     1479322310010011
     1489422410010100
     1499522510010101
     1509622610010110
     1519722710010111
     1529823010011000
     1539923110011001
     1549A23210011010
     1559B23310011011
     1569C23410011100
     1579D23510011101
     1589E23610011110
     1599F23710011111
     160A024010100000
     161A124110100001
     162A224210100010
     163A324310100011
     164A424410100100
     165A524510100101
     166A624610100110
     167A724710100111
     168A825010101000
     169A925110101001
     170AA25210101010
     171AB25310101011
     172AC25410101100
     173AD25510101101
     174AE25610101110
     175AF25710101111
     176B026010110000
     177B126110110001
     178B226210110010
     179B326310110011
     180B426410110100
     181B526510110101
     182B626610110110
     183B726710110111
     184B827010111000
     185B927110111001
     186BA27210111010
     187BB27310111011
     188BC27410111100
     189BD27510111101
     190BE27610111110
     191BF27710111111
     192C030011000000
     193C130111000001
     194C230211000010
     195C330311000011
     196C430411000100
     197C530511000101
     198C630611000110
     199C730711000111
     200C831011001000
     201C931111001001
     202CA31211001010
     203CB31311001011
     204CC31411001100
     205CD31511001101
     206CE31611001110
     207CF31711001111
     208D032011010000
     209D132111010001
     210D232211010010
     211D332311010011
     212D432411010100
     213D532511010101
     214D632611010110
     215D732711010111
     216D833011011000
     217D933111011001
     218DA33211011010
     219DB33311011011
     220DC33411011100
     221DD33511011101
     222DE33611011110
     223DF33711011111
     224E034011100000
     225E134111100001
     226E234211100010
     227E334311100011
     228E434411100100
     229E534511100101
     230E634611100110
     231E734711100111
     232E835011101000
     233E935111101001
     234EA35211101010
     235EB35311101011
     236EC35411101100
     237ED35511101101
     238EE35611101110
     239EF35711101111
     240F036011110000
     241F136111110001
     242F236211110010
     243F336311110011
     244F436411110100
     245F536511110101
     246F636611110110
     247F736711110111
     248F837011111000
     249F937111111001
     250FA37211111010
     251FB37311111011
     252FC37411111100
     253FD37511111101
     254FE37611111110
     255FF37711111111
    표1) 참조 : IBM

    MEMORY

    프로그램과 데이터는 CPU에서 실행되기 전에 메모리로 임시로 이동하여 저장합니다. 프로그램과 실행과 프로그램이 작업 중인 데이터를 임시 저장하기 위한 바이트의 순차적인 시퀀스로 구성되어 프로그램을 빠르게 실행하는 컴퓨터의 작업 영역으로 볼 수 있습니다.

    메모리의 모든 바이트는 고유한 주소를 가지며, 이 주소는 데이터를 저장하고 검색하기 위해 바이트를 찾는 데 사용됩니다. 메모리의 바이트는 어떤 순서로든 접근할 수 있으므로, 메모리는 RAM(Random Access Memory)라고도 불립니다. 이 랜덤한 공간에 각 작업진행 사항 및 작업들을 기억하고 있어 빠르게 전환도 가능합니다.

    특히 요새는 인터넷을 보며 음악을 듣고 게임을 하는가 하면 또, 게임을 즐기며 영화도 보는 사람들도있습니다. 동시에 여러 일들을 수행하거나 복잡하거나 무거운 프로그램을 띄울 때 메모리를 많이 사용하므로 최소 16GB 이상, 평균 32GB 많게는 64GB~128GB를 사용하는 유저들이 늘어나고 있다.

    메모리는 고유하게 주소 지정된 메모리 위치에 데이터와 프로그램 명령어를 저장합니다. 컴퓨터 운영체제는 프로그램 실행을 위한 다양한 메모리 공간을 할당해주는데 이 때 할당되는 메모리 공간에는 스택, 힙, 데이터 영역으로 나누어진다.

    방향위치영역비고
    High memoryRAM스택 (STACK) 영역
    – 함수의 호출과 관계되는 지역 변수와 매개변수가 저장되는 영역으로 함수 호출이 완료되면 소멸
    – 스택 영역에 저장되는 함수의 호출 정보를 스택 프레임(stack frame)이라고 함
    – 스택 영역은 푸시(push) 동작으로 데이터를 저장하고, 팝(pop) 동작으로 데이터를 인출
    (이러한 스택은 후입선출(LIFO, Last-In First-Out) 방식에 따라 동작)
    – 가장 늦게 저장된 데이터가 가장 먼저 인출되며 한 영역이 커지면 다른 한 쪽은 작아짐
    (한 쪽의 저장 공간이 부족하면 상대의 영역을 침범하게 되며 이를 스택 오버플로우,
    힙 오버플로우라고 함)
    – 해당 객체가 정의된 블록(스코프)을 벗어날 때 소멸
    – 함수의 호출하는 위치도 저장
    void ict1(int);
    void ict2(int);
    int a= 100;
    int b = 200;
    int main(){
    int i = 1000;
    ict1(i);
    ict2(i);
    return 0;}
    void ict1(int c){
    int d = 300;}
    void ict2(int e){
    int f = 400;}
    RAM힙 (HEAP) 영역
    – 프로그램이 실행되는 동안 동적으로 할당하는 데이터가 저장되는 영역.
    사용자가 직접 관리하는 영역으로 C언어에서 malloc, free를 하면 이 영역에 저장
    – 가비지 컬렉터가 없으면 프로그래머가 직접 관리(할당/해제)해줘야 함
    – 메모리의 낮은 주소에서 높은 주소의 방향으로 할당됨.
    – 동적 메모리 할당 ( new /포인터)
    – delete를 사용하여 해당 객체 메모리 반환
    – 스택보다 느림
    사용자의 동적 할당
    RAMBSS(Block Started by Symbol) 영역에 초기화되지 않은 전역 데이터를 저장하는 영역초기화 되지 않은 변수
    RAM데이터 (DATA) 영역 –
    초기화된 데이터는 ROM 위치의 데이터 영역에 저장되는데 ROM(Read Only Memory)은
    읽기 전용이라 수정이 불가능하여 계속 초기 값만을 가지고 있어 데이터 영역을 RAM에 복사
    하여 프로그램이 실행될 경우 변경되는 값을 저장할 수 있도록 하기 위해 RAM에도 데이터 영역이 존재

    초기화된 전역 변수
    int a= 10;
    int b = 20;
    int main() {

    }
    ROM데이터 (DATA) 영역 (정적 메모리) –
    프로그램의 전역(global) 변수와 정적(static) 변수가 저장되는 영역.
    데이터 영역은 프로그램의 시작과 함께 main 함수가 호출되기 전 할당되며,
    프로그램이 종료되면 소멸됨.
    Low memoryROM코드 (CODE) 영역 –
    사용자가 작성한 프로그램의 코드가 저장되는 영역. 텍스트(code) 영역이라고도 칭함.
    CPU는 코드 영역에 저장된 명령어를 하나씩 가져가서 처리함.
    컴파일된후 기계어 형태로 저장되어 있음.
    실행할 코드
    (기계어 형태)

    데이터 영역

    데이터 (DATA) 영역a = 100, b = 200
    힙 (HEAP) 영역
    스택 (STACK) 영역
    데이터 영역에 전역 변수가 저장됨

    스택 영역

    데이터 (DATA) 영역a = 100, b = 200
    힙 (HEAP) 영역c = 1000, d = 300ict1
    스택 (STACK) 영역i = 1000main
    메모리가 스택 영역에 저장

    Subscribe