CS/OS & 하드웨어

    프로그램 (Program) 이란?

    컴퓨터를 실행시키기 위해 차례대로 작성된 명령어 모음. 컴퓨터 프로그램이란 컴퓨터 안에 있는 논리적인 기계라고 볼 수 있다. 기계를 작동시키면 설계된대로 작동한다. 컴퓨터 프로그램도 마찬가지로 수동적으로 적혀진 명령어 대로 작동한다. 다만 너무 빨리 입력받고 처리해서 능동적으로 보일 뿐이다. 프로그램의 종류 크게 시스템 프로그램과 응용 프로그램으로 나뉘어져 있다. 시스템 프로그램이란 컴퓨터 시스템과 하드웨어들을 스스로 제어 및 관리하는 프로그램들을 말한다. 윈도우, 리눅스 같은 운영체제나 장치 드라이버, 컴파일러, 링커 등이 있다. 응용 프로그램이란 사용자가 원하는 기능을 제공하는 프로그램으로 실행하는 동안 지속적으로 컴퓨터의 성능을 소비한다. 워드, 엑셀, 포토샵, 게임, 브라우저 등이 있다. http..

    세션의 생성과 관리

    세션이란, 멀티 player 게임의 1 개의 인스턴스이다. 1 개의 세션에는 동시에 플레이 하는 복수의 사용자가 존재해, 각각이 자신의 컴퓨터상에 게임 클라이언트를 가지고 있다. player란, 게임안의 엔티티여, 각 게임에서 정의한다. 각 사용자가, 1 개의 게임에 복수의player를 가지는 경우도 있다. 다만, 게임 애플리케이션은, 개별의 Microsoft® DirectPlay® 인터페이스 또는 각 player의 개체를 사용해, 이러한 player를 애플리케이션 자신으로 관리해야 한다. 세션 생성의 최초의 순서는, 사용자 그룹의 수집이다. 이 때문에는, 2 개의 기본적 방법이 있다. 많은 게임 세션은, 리모트 컴퓨터로 실행되는로비 애플리케이션에 의해 준비된다. 이 방법은, 많은 인터넷 베이스의 게임에..

    세그멘테이션 (Segmentation) 오류

    운영 체제(OS)에서 세그멘테이션 오류는 프로그램이 올바르지 않은 메모리 영역에 접근하려고 할 때 발생하는 예외다. 예외 발생 시 운영 체제는 프로세스를 종료시키고 종종 코어 덤프를 생성한다. C/C++에서는 메모리 관리를 개발자가 수동으로 해야 하는 특성을 가지고 있기 때문에 주로 C/C++ 코드에서 자주 발생한다 . 발생하는 상황들 1. 함수 포인터를 초기화하지 않고 호출 void (*func_ptr)(); // 초기화되지 않은 함수 포인터 func_ptr(); // 초기화되지 않은 함수 포인터 호출로 인한 세그멘테이션 위반 발생 2. 배열 범위를 넘어서는 인덱스 사용 int arr[10]; arr[100] = 42; // 범위를 벗어난 인덱스 사용 3. 동적 메모리 할당 후 해제한 메모리에 접근 i..

    세그멘테이션(Segmentation)이란? 세그멘테이션 vs 페이징

    세그멘테이션이란? 페이징은 프로세스를 물리적으로 일정한 크기로 나눠서 메모리에 할당하는 것을 의미한다. 반면, 세그멘테이션은 프로세스를 논리적 내용을 기반으로 나눠서 메모리에 배치하는 것을 의미한다. 세그멘테이션은 프로세스를 세그먼트(segment)의 집합으로 표현한다. 이때 세그먼트는 논리 단위로 아래와 같은 것들이 해당된다. main program procedure function method object stack local variable global variable etc... 프로세스를 code영역, data영역, stack영역 등으로 나누는 것 또한 세그멘테이션이라고 할 수 있다. 세그멘테이션 계산 세그멘테이션도 페이징과 비슷하게 세그먼트 테이블을 가지고 있다. 페이징과 비슷하게 논리주소가 ..

    아스키코드(ASCII Code) - 컴퓨터의 문자 처리 원리

    컴퓨터가 이해하는 언어는 0과 1(1bit)이다. 2진수로 데이터를 처리한다. 컴퓨터는 전기신호를 받아들이므로 전기의 OFF, ON 두 가지 상태(0과 1)로 모든 걸 표현하기 때문이다. 0과 1의 두 가지 상태를 나타내는 단위를 bit라고 한다. 그러나 1bit만으로는 표현할 수 있는 게 0, 1 단 두 개뿐이니, 더 큰 수를 표현하기 위해 8개의 bit를 묶어서 1byte를 사용한다. 컴퓨터가 데이터를 저장하는 최소 단위가 바로 이 byte다. 1byte는 8개의 bit니까 2의 8제곱, 즉 0~255(256개)의 데이터를 저장할 수 있다. 중요한 것은 더 큰 수를 표현할 수 있게 되었더라도 컴퓨터가 인식하는 것은 숫자라는 점이다. 컴퓨터는 0과 1 이외에는 아무것도 인식할 수 없기 때문이다. 그렇다..

    프로그래밍 언어와 빌드 과정 [Build Process]

    ⦁ Build 란? 컴퓨터는 근본적으로는 0과 1밖에 모른다. 우리가 작성하는 코드들은 거의 대부분 고급언어를 사용하기 때문에 결국에는 컴퓨터(CPU)가 이해할 수 있도록 번역을 해주어야한다. (C, Java, C++ 등 어셈블리를 제외한 대부분 언어가 고급언어다.) 컴퓨터가 이해하는 언어를 기계어라고 하는데, 우리가 만든 소스 코드가 컴퓨터 입장에서는 해외판 책이 되는 것이고, 이 책을 기계어(machine code)로 번역하여 컴퓨터에서 이해할 수 있는, 즉 실행 가능한 파일로 만드는 과정을 빌드(Build) 라고 한다. ⦁ Build Process 1. Compile Type 이렇게 한 번에 번역하는 언어들을 보통 Compile Language 라고 하는데, 대표적으로 C, C++, Go 언어가 있..

    아스키코드, 유니코드, UTF-8의 차이

    인코딩 : 문자를 어떻게 출력할지에 대한 약속 숫자를 문자로 바꿈 예를 들어, 메모장에 A라고 친 다음 저장하면 실제로 하드디스크에 기록되는 정보는 65라는 숫자값. A -> 65라고 저장하도록 만들어놨기 때문에 가장 처음 만들어진 인코딩이 ASCII코드 아스키코드 : 128개의 문자조합을 제공하는 7비트 부호 아스키코드만으로는 각 나라별 언어를 표현할 수 없다. 이를 해결한 코드가 유니코드 알파벳, 숫자, 특수기호, 그 외 컴퓨터에 필요한 몇 가지만이 정의되어 있어서 점차 여러 나라에서 컴퓨터를 사용하게 되고 통신이 발달하다보니 기존의 아스키 인코딩보다 더 많은 문자들을 정의한 새로운 인코딩이 필요해짐 유니코드(Unicode) : 각 나라별 언어를 모두 표현하기 위해 나온 코드 체계가 유니코드 숫자와 ..

    메모리 (RAM) 구조

    RAM과 ROM RAM은 자유롭게 읽고 쓸 수 있는 기억장치로, RWM(Read Write Memory)라고 부르기도 한다. 또한 RAM에는 현재 사용 중인 프로그램이나 데이터가 저장되어 있다. 시스템의 전원이 꺼지면 기억된 내용이 모두 사라지는 휘발성 메모리의 특징을 가진다. 일반적으로 주기억장치 또는 메모리라고 불린다. ROM은 기억된 내용을 읽을 수만 있는 기억장치로서 일반적으로 쓰기가 불가능하다. 또한 시스템의 전원이 꺼져도 기억된 내용이 지워지지 않는 비휘발성 메모리다. 실제로 ROM은 주기억장치로 사용되기보단 주로 변경 가능성이 없는 시스템 소프트웨어를 기억시키는데 이용된다. (ex. 기본 입출력 시스템, 자가 진단 시스템) 프로그램 실행 순서 프로그램이 실행되는 과정을 도식화하면 다음과 같다..

    Virtual Memory - 가상 메모리 ( 필요한 이유 )

    간단하게 말해서 프로세스의 논리 메모리와 물리 메모리를 분리하기 위해 생긴 개념이다. 왜 분리를 해야 하냐면, 물리 메모리의 한계를 극복하기 위해서이다. 무슨 말이냐면 여러 프로그램을 돌리면 메모리 부족의 문제가 생긴다. 이는 메모리 침범의 문제로 이어지기 때문에 이를 해결하고자 한 방법이다. 이런 이유 때문에 가상 메모리와 물리 메모리를 분리한다는 의미다. 논리 메모리가 가상 메모리다. 왜 가상 주소가 필요한지 예를 들어보자, 3개의 프로그램을 일정 시간에 따라 반복적(time에 따라)으로 돌리고 메인 메모리의 크기는 64KB라고 가정해보자. 그러면 먼저 taks1 (32KB), task2(16KB), task3(48KB)의 정보는 Hard disk에 다 들어있을 것이다. 그러다가 task1이 실행되면..

    Memory Allocation (논리 메모리, 물리 메모리, Dynamic Loading, Paging이 나온 이유 )

    memory를 나눌 때 어떻게 눌지 정해야 한다. 모든 프로세스는 메모리에 올라와서 실행되는데 각각의 프로세스는 자신만의 할당 메모리가 있다. 이때 하나의 프로세스가 다른 프로세스 메모리에 침범하면 문제가 생긴다. 이런 이유 때문에 메모리의 구분이 필수적이다. 예방하는 방법으로 가장 단순하게는 시작 주소와 끝 주소를 지정하는 것이다. base 주소로부터 limit 주소를 하나의 프로세스에게 할당한다. (+아래서 보이지만, 운영체제 또한 메모리 상에 존재한다.) 어떤 프로세스를 할당할 때, base 주소보다 크고 base + limit 주소보다 작은 공간이 비어 있다면 할당하는 순서를 가질 수 있다. 메모리 주소 메모리에는 Logical address와 Physical address가 존재한다. 이 차이를..