목록2024/03 (28)
hmk run dev
프로세스 직접 확인하기 포그라운드 프로세스 - 사용자가 볼 수 있는 공간에서 실행되는 프로세스 백그라운드 프로세스 - 사용자가 볼 수 없는 공간에서 실행되는 프로세스 - 사용자와 상호작용하지 않고 그저 정해진 일만 수행하는 프로세스 ex) 데몬, 서비스 MAC에서 현재 활성 중인 프로세스 살펴보기 프로세스 제어블록 모든 프로세스는 실행을 위해 CPU가 필요하다. But, CPU 자원을 한정되어있다. 프로세스들은 돌아가며 한정된 시간 만큼만 CPU 이용 - 자신의 차례에 정해진 시간만큼 CPU 이용 - 타이머(타임아웃) 인터럽트가 발생하면 차례 양보 빠르게 번갈아 수행되는 프로세스들을 관리해야 이를 위해 사용하는 자료구조가 프로세스 제어블록 (이하 PCB) - 프로세스 관련 정보를 저장하는 자료구조 - 마..
우리가 작성한 프로그램은 대부분 운영체제에 의해 관리되고 실행된다. 운영체제는 현존하는 프로그램 중 규모가 가장 큰 프로그램 중 하나 (참고로, 리눅스 운영체제 소스코드 라인수만 해도 2700만줄 이라고 한다) 운영체제가 제공하는 기능은 다양하다. 그러나, 가장 많이 사용되는 가장 핵심적인 서비스는 존재한다. 컴퓨터 자원에 접근하고 조작하는, 프로그램이 올바르고 안전하게 실행하는 기능등등.. 커널 운영체제의 핵심 서비스를 담당하는 부분 운영체제가 방대한 크기의 프로그램일 지라도 커널은 대동소이하다. 대부분의 전공서는 운영체제에 대해 설명할때 커널에 대해 설명한다. 고로 이 글에서 커널 = 운영체제라고 봐도 무방하다. (UI는 운영체젠에는 속하지만 커널에는 속하지 않음) 시스템 콜과 이중 모드 사용자가 실..
클럭(clock) 1. 컴퓨터 부품들은 '클럭 신호'에 맞춰 일사불란하게 움직인다. 2. CPU는 '명령어 사이클'이라는 정해진 흐름에 맞춰 명령어들을 실행한다. 일반적으로 클럭 신호가 빠르게 반복되면 CPU를 비롯한 컴퓨터 부품들은 그만큼 빠른 박자에 맞춰 움직이겠네요? 꼭 그런건 아니지만 일반적으로는 맞다. 클럭 속도 - 헤르츠(Hz) 단위로 측정 (초당 횟수) - 클럭이 '똑-딱-' 하고 1초에 한 번 반복되면 1Hz 클럭 신호를 무지성으로 높이면 CPU가 무지막지하게 빨라진다? 필요 이상으로 클럭을 높이면 발열이 심해짐 코어와 멀티 코어 - 클럭 속도를 늘리는 것 이외에 성능을 높이는 방법은? - 코어 수를 늘리는 방법 ex) 듀얼 코어, 멀티 코어... - 스레드 수를 늘리는 방법 ex) 멀티 ..
내가 작성한 소스코드가 어떻게 컴퓨터가 이해할 수 있는 명령어로 바꿔서 동작하게 할까? 고급 언어(js, java, python 등등)와 저급 언어 고급 언어 - 개발자가 이해하기 쉽게 만든 언어 - 컴파일 언어 작성된 소스코드가 컴파일러에 의해 저급 언어로 변환되고, 컴파일 결과로 저급 언어인 목적 코드가 생성된다, - 인터프리트 언어 인터프리터에 의해 한 줄씩 실행 소스 코드 전체가 저급 언어로 변환되기까지 기다릴 필요 없음 컴파일과 인터프리트 과정 살펴보기 https://godbolt.org/ 저급 언어 - 컴퓨터가 이해하고 실행하는 언어 기계어 이진수 혹은 16진수로 표현된 기계어 어셈블리어 0과 1로 이루어진 기계어를 읽기 편한 형태로 번역한 저급언어 Reference https://www.ye..
알다시피 컴퓨터는 0과 1밖에 이해하지 못한다. 그런데 어떻게 우리가 작성한 문자를 해석해서 명령을 실행시킬 수 있을까? 문자집합(character set) 컴퓨터가 이해할 수 있는 문자 모음 인코딩(encoding) 코드화하는 과정 문자를 0과 1로 이루어진 문자 코드로 변환하는 과정 문자 => 0 or 1 디코딩(decoding) 코드를 해석하는 과정 0과 1로 표현된 문자 코드를 문자로 변환하는 과정 0 or 1 => 문자 문자집합 아스키코드(ASCI) - 초창기 문자집합 중 하나 - 알파벳, 아라비아 숫자, 일부 특수 문자 및 제어문자 - 7비트로 하나의 문자 표현(실제로는 8비트) 8비트 중 1비트는 오휴 검출을 위해 사용되는 패리티 비트(parity bit) EUC-KR - 2300여개의 한글..
컴퓨터는 0과 1밖에 이해하지 못한다. 그런데 1보다 큰수를 어떻게 이해할 수 있을까? 컴퓨터가 이해하는 가장작은 정보단위는 bit이다 비트(bit) : 0과 1을 표현하는 가장 작은 정보 단위 아래와 같이 0과 1을 표현할 수 있는 여러개의 비트로 1보다 큰 수를 표현할 수 있다. - n 비트로는 2n가지의 정보를 표현가능 - 프로그램은 수많은 비트로 이루어져 있음(브라우저, 포토샵, 게임 등등) - 다만, 평소 "이 파일은 8,920,120 비트야" 라고 표현하진 않음 - 비트보다 큰 단위를 사용함 (byte, kb, mb, gb, TB) 정보단위 워드(word) - cpu가 하번에 처리할 수 있는 정보의 크기단위 - 하드워드 : 워드의 절반 크기 - 풀워드 : 워드 크기 - 더블 워드 : 워드의 두..
컴퓨터가 이해하는 두 가지 정보는 크게 두 가지가 있다. 1. 데이터 - 숫자, 문자, 이미지, 동영상과 같은 정적인 정보 - 컴퓨터와 주고 받는, 내부에 저장된 정보 - 0과 1로 숫자를 표현하는 방법 - 0과 1로 문자를 표현하는 방법 2. 명령어 - 컴퓨터는 결국 명령어를 처리하는 기계 - 명령어 - 컴퓨터를 실질적으로 움직이는 정보 - 데이터는 명령어를 위한 일종의 재료 - 명령어의 생김새와 동작 방식 컴퓨터의 4가지 핵심 부품 컴퓨터의 종류를 막론하고 컴퓨터를 동작시키는 부품은 대부분 같다. CPU 컴퓨터의 두뇌, 메모리에 저장된 값을 읽어 들이고, 해석하고, 실행하는 장치 CPU는 크게 세 가지로 구성되어 있음(이 밖에 많은 부품이 존재하긴함 ex. 캐시 메모리) - ALU:계산기(계산을 위한..
처음 개발을 배운다면 프로그래밍 언어와 문법부터 학습을한다. 개발자는 코드만 잘짜면 되는가? 컴퓨터구조를 굳이 왜 알아야하는가? 좋은 개발자가 되기 위해선 프로그래밍 언어의 문법과 함께 컴퓨터의 근간을 알아야한다. 1. 문제 해결 능력 2. 성능 용량 비용을 고려한개발 분명 코드를 제대로 작성했는데 왜 동작하지 않는 거지? 같은 코드라도 실제로 사용자들에게 동작이 잘 되지 않는 경우가 꽤 있다 이는 프로그래밍 언어의 문제일까? 입력 너머에 근원적인 문제가 아닐까? 여기서 컴퓨터에 대해서 무지하다면 문제 원인에 대한 파악부터 어려워 질 수 있다. 심지어 개발 전에 사전에 미리 문제점을 파악하고 예방을 할 수 있는 사고를 할 수도 있다. 좋은 개발자의 덕목중 하나인 문제해결력은 탄탄한 기본에서 나오지 않나싶..