컴퓨터 기초

Shaun·2023년 5월 11일
1

computer

목록 보기
1/1

이직을 하고 적응하면서 공부를 좀 못했던것 같다. 이직이 끝날때까지 기술을 어떻게 쓰는지 기술위주로 공부했다면 이번에는 좀더 core 쪽을 공부해 보고 싶었다. 뭐 예를들어 비전공자인 나에게는 컴퓨터라는 물체에 대한 공부, 혹은 네트워크..

그래서 이번기회에 깊게는 아니지만 그래도 대화는 가능할정도로 컴퓨터에 대한 공부를 좀 해봤다.

컴퓨터

  • 컴퓨터는 우리가 하는 말을 알아 듣지 못하며 오직 0 과 1로 사람과 대화를할 수 있다.
  • 0과 1은 bit 라는 단위로 표현할 수 있으며 다른 말로는 디지털 이라고도 한다.
  • 단순하게 생각해 0은 스위치를 껐을때, 1은 스위치를 켰을때 생각하면 됀다.
  • 0 과 1로만 표현할수 있어서 2진수 라고도 한다. 우리가 평소에 사용하는 단위는 10진수

  • 이런식으로 하나의 bit(1 or 0 ) 이 4개모여 4비트를 완성한다.(2진수)

  • 4비트는 2의 4승이므로 총 16가지의 경우의 수가 나온다. (2의3승/2의2승/2의1승/2의0승 을 다 더함)

2진수와 16진수

  • 하지만 더 간편하게 표현하기 위해 보통은 16진수를 사용한다.

  • 2진수에서 16진수로 전환하는 법은 간단하다. 해당 스위치가 켜져있는(0이아닌 1) 자리의 경우의 수를 모두 더해주면 됀다. 예를들어 0011 인경우 2의1승+2의0승이니 3이 나온다.

  • 16진수가 9를 넘어 10이 되는 순간, 표기법은 A~F로 바뀌게 됀다. 예를들어 1010 같은경우 2의 3승 +2의 1승 즉 8+2 이므로 A가 나온다.

  • 0x4F4 같은 경우는 F(16진수) = 4bit, 4(16진수) = 4bit 이므로 총 8비트라고 볼수있다.

단위체계

  • 8개비트 즉 8bit = 1바이트

  • 1바이트는 영문자 한글자가 저장될 수 있는 메모리 크기이며 관리의 최소단위 이다.(한글은 2바이트)

  • 자주 쓰이는것은 외워두자

    4비트 =16가지
    8비트는 = 256가지
    16비트는 65,536가지 (64KB)

다양한 16진수

  • 색상을 표현할때도 16진수를 활용한다. 그 외에 하드웨어 주소표현, 메모리값 표현을 할때도 사용한다.

  • 색상을 표현할때는 주로 RGB로 표현을 한다.한컬러당 255가지의 경우의 수 즉 8비트로 표현됀다.

  • 모니터 화면상 점 하나를 화소 (픽셀) 이라고 한다. 픽셀을 표현할때 8,16,24,32비트로 표현할 수 있다. 보통 픽셀은 24비트이며 투명도까지 하면 32비트 즉 4바이트다.

  • RGB는 24비트 + Alpha Channel(투명도 8비트) 까지해서 32비트가 됀다. 이것은 RGBA 라고 부른다.

  • 각각의 화소들의 RGB값들을 모아서 만든것을 bitmap이라고 한다. 하지만 이것은 용량이 너무커서 보통은 압축해서 사용함

  • 개발자 도구를 켜서 CSS를보면 #B7 1C 1C 이런식으로 구성 되있다.(16진수) 이 예시는 8 8 8 비트이므로 총 3바이트다.

CPU

  • cpu를 사람에게 비유하자면 뇌 와같은 존재이다. 제일 중요한 존재이며 주로 연산작업을 한다.

CPU-디지털회로

  • CPU가 연산하는 방법은 간단하다. cpu는 여러개의 게이트로 구성 되있다. 그래서 산술 연산이 가능한것!

  • A,B로 input이 들어가며 해당조건에 맞게 결과값이 나온다.

  • 좀 더 자세하게 살펴보면 input이 들어가는 쪽에 전류를 줄수도 안줄수도 있다. 어떻게 비트 개념과 똑같다고 볼수 있다.

컴퓨터의 산술연산

  • 이런걸 반가산기 라고 부른다.

  • 2진수 1+1 = 10(2진수) 이다.

  • A가 1,B가 1이면 XOR 연산자 결과는 S이다

  • 동시에 A가 1, B가 1이면 AND 연산결과 C는 1이다.이 1은 자리올림(carry)이다.

  • 하지만 'A'를 예로들어보자,
    ->십진수로는 65,
    ->16진수로는 0x41 ==> 0100,0001

-> 2진수는 숫자가 올라가면 자리올림이 발생한다. 뭔가 더하면 a+b만 하는게 아닌 자리올림까지 더해야 하므로 3개를 더해야 한다. 즉 3개의 bit를 합산할수 있는 로직이 필요함

-> 그래서 나온게 전가산기, 전가산기들이 모여 더하기를 할수 있다.

컴퓨터의 뺄셈

  • 컴퓨터의 뺄셈을 이해할때는 보수 라는 개념을 이해하면 쉽다.

  • 6에 4를 더하면 10이다. 즉 4는 6에대한 10의 보수이다.

  • 13에 6에 대한 10의 보수 4를 더하고 10자리에서 1을 빼도 역시 7이다.

--> 보수를 구해서 더하면 빼기가 된다. 즉 덧셈을 계산할수 있는 전가사닉로 뺄셈도 계산 가능함!

컴퓨터의 뺼셈-2진수

  • 2진수에서 0은 1로, 1은 0으로 뒤집으면 1의 보수가 된다.

  • 1의 보수 + 1 = 2의 보수

  • 어떤 숫자에 2의 보수를 더하면 자동으로 2진수 뺄셈이 된다. (자리올림은 버린다)

  1. 예를들어 13-6같은 경우에는 13에 2의 보수를 더하면 된다. 즉 13+1의 보수 + 1
  2. 6 = 0110 -> not연산자로 뒤집으면 1001
    1001+1 = 1010
  3. 1101+1010 = 10111 인데 첫째자리는 4비트를 넘어감으로 무시한다. 즉 최종적으로 0111이 나옴!
  • 곱셈같은 경우는 따지고 보면 여러번 더하는것, 나눗셈도 여러번 뺴면된다. 즉 지금까지 배운것이 작동하면 4칙연산이 동작하고 컴퓨터는 이렇게 동작한다는 점!

컴퓨터의 곱셈

  • 곱셉은 shit라고 표현한다. 한칸씩 왼쪽으로 밀어낸다고 생각하면 됀다.(Ex: 10 ->100)

  • 자리올림은 버린다.

EX:

  • 0101(5) -> 1010 이 됀다. 이때 채워지는 것을 padding이라고 한다. 왼쪽으로 한칸 밀면 곱하기 2의 효과
  • 1010 = 8421 이다 . 즉 8+2 = 10이 나옴
  • 곱하기 3은 0101(5) 1010(10) 을 더하면 되니까 1111이 나옴, 1111 = 8421, 8421 다 더하면 15가 나옴!

컴퓨터의 나눗셈

  • 곱하기와 반대로 나눈기는 오른쪽으로 shift 한다. 당연히 패딩도 왼쪽에서 발생!

  • 곱하기도 알고보면 덧셈의 연속, 나눗셈도 알고보면 밸셈의 연속이다.

EX:

  • 0110(6) 을 오른쪽으로 한칸씩 밀면(=2로나누면) 00110 나옴, 오른쪽 자리올림은 버린다
  • 0011 -> 2+1 = 3이나옴
  • 0으로 무한으로 나누게 되면 cpu에 부담이 갈수있으니 조심하자! 하지만 우리가 사용하는 요즘 범용 pc는 알아서 os에서 처리를 해준다!

컴퓨터가 연산하는 과정

  • Ram이라는 구조를 살펴보면 엑셀과 매우 흡사함, 즉 데이터에 대한 일련번호들이 있다.

  • 해당 데이터를 Ram에서 가져와 CPU Register라는 임시공간에 담아둔다. 그리고 난뒤 ALU라는곳에 보내 연산을 해서 값을 도출함

  • cpu에서 계산을 끝낸뒤에 다시 Ram에 저장함

==> 만약 cpu가 64비트이고 윈도우를 32비트를 깔아버리면 ram을 16GB를 사용해도 4GB(32비트)밖에 인식 못함

기억장치 종류와 역활

  • 일반적으로 램은 1차메모리, ssd나 hdd는 2차메모리라고 한다.

  • cpu에 비해 ram 은 상당히 느리다.

  • cpu와 ram 은 휘발성 메모리다. 전원을 on/off 할경우 저장되있던 데이터들이 다 날아간다. 하지만 요즘은 중간중간에 백업 알아서 잘한다.

  • 위로 갈수록 빠르고 고가이다. 이것을 서포팅 하기위해 캐쉬메모리가 존재함. ram에서 cpu로 데이터를 가져갈때 캐쉬메모리를 거쳐 가게됀다.

  • 캐쉬메모리는 램에서 데이터를 가져와 cpu에서 연산할때 예측되는(필요로하는 데이터) 들을 ram에서 미리 가져온다. 왜냐하면 cpu계산 속도에 비해 ram은 너무 느리기때문 = 속도차이 극복!!!!

  • 우리가 보통 2차 메모리공간에 프로그램을 설치하고 ‘실행’ 하면 ram 메모리에 카피되서 올라옴. 그래서 cpu에서는 프로그램에대한 연산! 그게 ‘실행’

HDD 논리적 구조

  • Cpu - register는 이름으로 관리를하며 주기억장치 공간은 고유이름으로 관리를 한다

  • 반면 hdd같은 2차 메모리는 '트랙'과 '섹터'로 데이터 위치를 파악한다. 데이터를 넣고 읽는 기능 을 수행한다 RW

  • 같은 위치에 데이터를 덮어씌우면(R) = overwrite 이기능이 계속되면 (10만번 정도하면)하드디스크가 망가져서 못쓰게 됌 - > 이렇게 해서 죽은 공간을 badSector이라 부른다

파일이 저장되는 방법(파일 시스템)

  • 파일을 저장할때 파일시스템. (윈도우는 NTFS) 를 사용한다

  • 파일 정보를 관리하는 테이블이 따로 존재한다 . Filer allocation table = FAT라고 부름

  • 만약에 파일을 삭제하면 FAT에서 완전 지우는는게 아니라 마킹만 따로한다( 삭제 여부 컬럼 체크표시)

  • 하드디스크 복원 이라는 개념 = 따로 마킹한 파일들을 따로 복사하는 작업

  • 0번트랙 0번섹터는 특별한공간MasterBootRecord = MBR ==> 운영체제의 부트 코드가 들어감!! 컴퓨터 껏다키면 0번트랙 0번섹터에가서 운영체제 부트코드를 가져와 메모리에 적재해서 실행함 이게바로 '컴퓨터 부팅' 이라는 개념

  • FAT를 날려버리는게 '포맷' 이라는개념 , 빠른포맷은 FAT만 날리는것 , 느린포맷은 전체 섹터와 트랙을 찾아 0 으로 만들어 주는 것이 느린포맷

동시성 VS 병렬 VS 원자성 VS 동기화 VS 교착상태

  • 병렬은 같은일을 여러명이 하는것 / 동시성은 말그대로 여러가지 일이 동시에 일어나는것

  • 원자성은 동시에 어떤일이 나더라도 하나의 주체가 안전하게 자기일을 할수 있는것 = 원자성을 보장받는다라고 말할수 있다.

  • 컴퓨터에서 동기화란 즉 교통정리하는것 , 사거리같은경우에서 신호등이 통제를 하듯 동기화를 할때는 잠금장치가 필요함 // 다른의미로도 사용하는데 원본 사본을 똑같이 맞춰줄때도 사용함

  • 교착상태 deadLock 은 서로 요구하는 조건이 곂쳐 이러지도 저러지도 못하는 상태,

프로그램VS 프로세스 VS 스레드

  • 프로그램을 깔아 실행을 하게되면 프로세스가 생성된다. 스레드프로세스를 돌리는 실행단위이다

  • 실질적으로 CPU를 사용하는 녀석은 스레드이다.

  • 실행단위스레드는 연산이다. 연산은 메모리를 사용한다. 스레드는 프로세스에서 할당된 메모리를 사용한다.

용도에 따른 기억공간의 구분

  • 메모리는 용도에 따라 기억공간을 구분하기 때문에 주거공간과 매우 흡사한 개념을 가지고 있다.

  • 메모리는 크게 stack , heap 영역으로 나뉘어지는데 stack이 스레드가 쓰는 공간, heap이 process 전체가 쓰는공간이라고 보면 됀다.

  • 스레드는 위에서 설명한 동시성 이런것들을 지키기위해 개인공간을 가지는것임!

OS의 핵심

  • 컴퓨터는 소프트웨어와 하드웨어 로 나뉘어지며 소프트웨어는 다시 Application과 System(Os)로 나뉘어진다.

  • os 는 크게 UserMode/ KernelMode 가 존재한다. 두 영역은 완전히 다른 영역임

  • h/w는 물리적 저장장소 즉 physical 이라고하며 소프트웨어는 logical, virtual이라고도 한다.

  • Os는 h/w에 의존적이며 이 둘사이에는 platform 이라는 말을 많이 사용한다. 즉 둘 사이에 원활한 작동을 위한 인프라를 뜻함.
    Ex: 64bit platform 이면 cpu,운영체제 둘다 64bit 라는 말

kernelMode

  • KernelMode 같은 경우는 보통 입출력 제어,자원관리, 접근통제를 한다.

  • h/w에 있는 device를 제어하기위한 커널모드에서 작동하는 소프트웨어를 driver이라고 부른다

HelloWorld 출력 flow

  • 만약 우리가 helloWorld를 모니터 화면에 출력 한다고 예를 들어보자. userMode에서 KernelMode로 명령을 내리기 위해서는 file형태의 인터페이스를 통해서 메세지를 전달할 수 있다. 이것을 DeviceFile이라고 부른다.

  • 그렇게 해서 전달된 명령을 커널모드-driver-device-모니터 화면순으로 전달 됀다.

  • 마찬가지로 hdd에 있는 데이터들을 찾을때 이런식으로 구성 되있음. 우리가 탐색기를 사용해서 데이터를 찾을때 그에 해당하는 인터페이스 방식으로 커널모드 파일시스템에 명령을 내리고 driver - hdd 순으로 흘러감

  • 중간에 커널모드에 있는 필터가 바이러나 이런걸 감지해 접근 통제를 한다. 커널모드 - 실시간 감시엔진

  • 하드웨어를 소프트웨어화 하는걸 가상화 즉 버츄얼라이제이션이라함

가상메모리

  • 주기억장치 ram에서 가능한것보다 더 많은 프로그램을 돌릴경우 hdd영역의 일부를 끌고와서 ram인것 처럼사용하는것을 가상 메모리라한다

  • Page라고하는 조각난 단위를 하드디스크와 램사이를 왔다갔다하면서 공간이동을 함. 속도가 무척 느리다

  • 실제로 크롬을 킬때 돌아가는 상황을 보면 os가 ram 몇기가 쓸수있는지를 알려준다. 크롬을 킬때 그에 해당하는 사용공간을 보면 실제로 ram일지 아닐지는 봐야한다(그전까지는 모름)

  • 만약에 ram쪽에 공간이 없다면 운영체제가 주기억장치(ram) 에서 hdd쪽으로 이사를 시켜버린다. 이것을 Page-outd이라고 부른다 그 반대는 Page-In

  • 각각 프로세스는 가상메모리를 가지고 그것을 page단위로 잘랐을때( 실행하는 프로그램) 어떤건 ram 어떤건 hdd에서 실행할 수 있도록 os가 교통정리를 해준다 그래서 프로세스가 더 독립적이다.

  • 가상메모리는 page in / page out 할때 프로그램들을 잠시 멈춤으로 결과적으로 봤을때 가상메모리는 어떻게든 돌아가게 해주는대신에 좀 느리다는 단점이 있다.

  • 프로세스를 완벽하게 분리할수 있다. 운영체제 입장에서 관리가 제대로 됀다.

CPU = Machine

  • CPU의 다른이름은 machine 이라고도 부른다.
  • 소프트웨어는 logical 또는 virtual 이라고 부른다

=>그래서 그 cpu를 소프트웨어로 구현시키면 그게 버츄얼 머신 (vm)

  • 버츄얼머신을 동작시키는 기계언어는 managed 라고 부른다.cpu나 os에 종속적이지 않는게 특징임. 하나의 소프트웨어에 종속적인 native 언어와 다름

  • 예를들어 자바 같은경우에는 jvm = 자바를 위한 cpu를 소트프웨어화 시킨 것, 그래서 자바의 대표적 특징- > 특정 os에 종속적이지 않다는게 성립됨

profile
호주쉐프에서 개발자까지..

0개의 댓글