티스토리

공부
검색하기

블로그 홈

공부

codingstudy95.tistory.com/m

김검정 님의 블로그입니다.

구독자
1
방명록 방문하기

주요 글 목록

  • AI 시대 개발자를 위한 운영체제 필수 개념정리 운영체제를 모르는 개발자는 땅의 구조를 모른 채 건물을 짓는 사람과 같다. 실무에서 메모리 부족, CPU 점유율 급등, 스레드 병목 같은 문제를 처음 만났을때 대부분 이렇게 느낀다. 운영체제(OS)란?운영체제는 컴퓨터 하드웨어와 소프트웨서 사이에서 통역사 역할을 하는 프로그램이다. 우리가 작성한 코드가 실제 컴퓨터에서 "언제", "어떻게" 실행될지 결정하는 건 바로 이 운영체제다. 운영체제가 하는 일 : 프로그램이 CPU를 사용할 수 있도록 순서 정하기(스케줄링)여러 프로그램이 동시에 돌아가도 문제없게 메모리 나눠쓰기파일을 읽고 쓰는 걸 도와주는 파일 시스템 관리사용자와 하드웨어 장치(키보드, 프린터 등) 사이 중재 운영체제 핵심 개념 5가지 1. 프로세스 vs 스레드구분프로세스스레드정의실행 중인 프로그.. 공감수 3 댓글수 5 2025. 4. 23.
  • 운영체제의 큰 그림 다음의 질문에 답할 수 있는지 생각해보자커널이란 무엇인가?운영체제의 서비스 종류는 무엇이 있는가?시스템 콜과 이중 모드는 무엇인가?  운영체제의 심장, 커널운영체제는 현존하는 프로그램 중 규모가 가장 큰 프로그램 중 하나이다. 구글에 리눅스 코드의 줄이 몇개인지 검색해보면 2,700백만 줄이라는 것을 볼 수 있다. 운영체제는 종류가 다양하고, 제공하는 기능도 다양하다.(가장 핵심적인 서비스는 존재한다) 이러한 운영체제의 핵심 서비스를 담당하는 부분을 커널(kernel)이라고 한다. 그럼 운영체제에는 속하지만 커널에는 속하지 않는 기능도 있을까? 유저 인터페이스(User Interface)가 여기에 속한다. 사용자와 컴퓨터 간의 통로일 뿐 운영체제의 핵심 기능(커널)은 아니다.   이중 모드와 시스템 호출.. 공감수 2 댓글수 1 2024. 8. 28.
  • 운영체제를 알아야 하는 이유 컴퓨터 부품들은 전기만 공급하면 알아서 작동하지 않는다.  모든 프로그램은 실행을 위해 자원을 필요로 한다.  자원 / 시스템 자원프로그램 실행에 있어 마땅히 필요한 요소컴퓨터의 네 가지 핵슴 부품 운영체제는 실행할 프로그램에 필요한 자원을 할당하고프로그램이 올바르게 실행되게 돕는특별한 프로그램  운영체제의 메모리 관리  운영체제의 CPU 관리  운영체제의 입출력장치 관리  운영체제 덕분에 개발자는 하드웨어를 조작하는 코드를 직접 작성할 필요가 없다.  개발자는 문제 해결 능력 - 오류 메세지에 대한 깊은 이해를 위해서는 운영체제를 알아야 한다. 공감수 0 댓글수 1 2024. 8. 14.
  • 장치 컨트롤러와 장치 드라이버 컴퓨터는 다른 외부 장치들과 어떻게 데이터를 주고받을까? 입출력장치는 종류가 너무나도 많다. 장치가 다양하면 장치마다 속도, 데이터 전송 형식 등도 다양하다.-> 다양한 입출력장치와 정보를 주고받는 방식을 규격화하기 어렵다. 일반적으로 CPU와 메모리의 데이터 전송률은 높지만 입출력장치의 데이터 전송률은 낮다.* 전송률 : 데이터를 얼마나 빨리 교황할 수 있는지를 나타내는 지표 이러한 문제점들을 어떻게 해결할 수 있을까?   장치 컨트롤러입출력 장치는  장치 컨트롤러를 통해 컴퓨터와 연결된다. 장치 컨트롤러의 역할에는 다음과 같은 것들이 있다.CPU와 입출력장치 간의 통신중개 (일종의 번역가 역할을 수행)오류 검출데이터 버퍼링 (전송률이 높은 장치와 낮은 장치 사이에 주고받는 데이터를 버퍼라는 임시 저장.. 공감수 0 댓글수 0 2024. 8. 13.
  • RAID 정의와 종류 1TB 하드 디스크 네 개로 RAID를 구성하면 4TB 하드 디스크 한 개의 성능과 안전성을 능가할 수 있다.  RAID의 정의RAID(Redundant Array of Independent Disks)하드 디스크와 SSD로 사용하는 기술데이터의 안정성 혹은 높은 성능을 위해 여러 물리적 보조기억장치를 마치 하나의 논리적 보조기억장치처럼 사용하는 기술 RAID 레벨RAID를 구성하는 기술RAID 0, RAID 1, ..... 스트라입(stripe) : 마치 줄무늬처럼 분산되어 저장된 데이터스트라이핑(striping) : 분산하여 저장하는 것 장점 : 입출력 속도의 향상 단점 : 저장된 정보가 안전하지 않다.   단점 : 하드 디스크 개수가 한정되었을 때 사용 가능한 용량이 적어짐   (RAID 1 처럼 .. 공감수 0 댓글수 0 2024. 8. 8.
  • 보조기억장치 하드 디스크 자기적인 방식으로 데이터를 저장한다. 구성  일반적으로 플래터 양면을 모두 사용하고,  RPM(Revolution Per Minute) : 분당 회전수 단위를 사용한다. 플래터를 스핀들이 회전을 시키는데 이렇게 회전시키면서 데이터를 읽고 쓰는 구성요소가 헤드이다. 일반적으로 모든 헤드가 디스크 암에 부착되어 함께 이동한다.   저장 단위기본적으로 트랙(track)과 섹터(sector) 단위로 데이터를 저장한다. 섹터의 크기 : 512바이트 ~ 4096바이트 여러 겹의 플래터 상에서 같은 트랙이 위치한 곳을 모아 연결한 논리적 단위를 실린더라고 한다.  연속된 정보는 한 실린더에 기록된다.  데이터 접근 과정하드 디스크가 저장된 데이터에 접근하는 시간탐색 시간 (seek time) : 접근하려.. 공감수 0 댓글수 0 2024. 7. 20.
  • 캐시 메모리 CPU가 메모리에 접근하는 시간은 CPU 연산 속도보다 현저하게 느리다. 이것을 어떻게 해결할 수 있을까? 저장 장치 계층 구조CPU와 가까운 저장 장치는 빠르고, 멀리 있는 저장 장치는 느리다.속도가 빠른 저장 장치는 저장 용량이 작고, 가격이 비싸다. 저장 장치들은 'CPU에 얼마나 가까운가'를 기준으로 계층적으로 나타낼 수 있다. 캐시 메모리CPU와 메모리 사이에 위치한, 레지스터보다 용량이 크고 메모리보다 빠른 SRAM 기반의 저장 장치CPU의 연산 속도와 메모리 접근 속도의 차이를 조금이나마 줄이기 위해 탄생한 저장 장치이다.CPU가 매번 메모리에 왔다 갔다 하는 건 시간이 오래 걸리기 때문에, 메모리에서 CPU가 사용할 일부 데이터를 미리 캐시 메모리로 가지고 와서 사용한다.  계층적 캐시 메.. 공감수 0 댓글수 0 2024. 7. 12.
  • 메모리의 주소 공간 위 그림과 같이 CPU 내부에는 논리 주소와 물리 주소로 주소 공간을 나눠져 있다. 논리 주솔르 물리 주소로 변환하는 방법은 무엇일까?CPU와 실행 중인 프로그램은 현재 메모리 몇 번지에 무엇이 저장되어 있는지 다 알고 있을까? 물리 주소와 논리 주소메모리에 저장된 값들은 시시각각 변한다. 새롭게 실행되는 프로그램은 새롭게 메모리에 적재되고, 실행이 끝난 프로그램은 메모리에서 삭제된다. 같은 프로그램을 실행하더라도 실행할 때마다 적재되는 주소는 달라진다.  이런 상황에서 어떤 주소에 어떤 명령어가 저장되어 있는지 일일이 다 알 수 있을까?  불가능하다. 그래서 이러한 문제를 극복하기 위해 주소체계를 물리 주소와 논리 주소로 나눈 것이다. 물리 주소메모리 입장에서 바라본 주소말 그대로 정보가 실제로 저장된.. 공감수 0 댓글수 0 2024. 7. 7.
  • RAM의 특성과 종류 주기억장치의 종류에는 크게 RAM과 ROM 두 가지가 있고, 메모리라는 용어는 그 중 RAM을 지칭하는 경우가 많다. RAM의 특징RAM은 실행할 대상을 저장한다. 하지만 전원이 꺼지게 되면 데이터가 날아가기 때문에 보조기억장치라는 전원이 꺼져도 데이터를 저장할 수 있는 장치가 필요하다.  RAM이 크면 뭐가 좋을까? RAM의 용량을 컴퓨터 성능에 어떤 영향을 미칠까? RAM의 용량과 성능 위 그림과 같이 RAM이 작아서 프로그램 3개중 하나만 저장가능하다고 가정해보자 CPU가 한번에 여러가지 연산을 할 수 없게된다. 반대로 RAM이 크면 어떻게 될까? 바로바로 RAM에서 데이터를 사용할 수 있다. 많은 프로그램을 동시에 실행하는 데에 유리하다. RAM의 종류1. DRAM(Dynamic RAM)Dynam.. 공감수 0 댓글수 1 2024. 7. 3.
  • 명령어 집합 구조 명령어는 어떻게 생겨야 명령어 파이프라이닝에 유리할까?명령어 집합 CPU는 명령어를 실행한다. 근데 모든 CPU가 똑같이 생긴 명령어를 처리할까?명령어의 세세한 생김새, 연산, 주소 지정 방식 등은 CPU마다 다르다. 명령어 집합 (구조) : CPU가 이해할 수 있는 명령어들의 모음 (=CPU의 언어) CPU는 명령어 집합에 속해있는 명령어만 이해하고 처리할 수 있다. 위 그림처럼 같은 소스코드를 컴파일해도 CPU에 따라 저급언어가 다르게 생성되는 것을 볼 수 있다. 명령어가 달라지면 많은 것들이 달라진다. ex) 명령어 해석 방식, 레지스터의 종류와 개수, 파이프라이닝의 용이성...  ISA는 CPU의 언어이자 하드웨어가 소프트웨어를 어떻게 이해할지에 대한 약속이다.  명령어 집합의 두 축 : CISC.. 공감수 0 댓글수 0 2024. 7. 2.
  • 명령어 병렬 처리 기법(CPU) 어떻게하면 CPU가 시간낭비없이 메모리에 있는 명령어들을 처리할 수 있을까? 명령어 병렬기법1. 명령어 파이프라인여러개의 명령어를 겹쳐서 실행하는 방법이다.명령어가 처리되는 과정을 비슷한 시간 간격으로 나누면?명령어 인출 (Instruction Fetch) : 메모리에서 명령어를 가져온다.명령어 해석 (Instruction Decode)명령어 실행 (Execute Instruction)결과 저장 (Write Back)같은 단계가 겹치지만 않는다면 CPU는 '각 단계를 동시에 실행할 수 있다'  명령어 파이프라인이 항상 이상적으로 실행되는 것은 아니다. 동시에 처리할 수 없는 경우도 있는데 그것이 파이프라인 위험이다.(병렬로 명령어 처리가 되지 않는 경우) 파이프라인 위험 : 명령어 파이프라인이 성능 향상.. 공감수 1 댓글수 3 2024. 7. 1.
  • 빠른 CPU를 위한 설계 기법 CPU를 어떻게 하면 빠르게 설계 할 수 있을까?  단순하게 생각해보면 CPU는 클럭 신호에 맞춰 움직이기 떄문에 클럭 속도를 빠르게 하면 되지 않을까? 클럭 신호에 맞춰 명령어 사이클이 실행되기 때문에 명령어 사이클 주기도 빨리 돌 것 같다. '그럼 클럭 신호가 빠르게 반복되면 CPU를 비롯한 컴퓨터 부품들은 그만큼 빠른 박자에 맞춰 움직이겠네?' 꼭 그런건 아니지만 일반적으로는 맞다. 클럭 속도클럭 속도 : 헤르츠(Hz) 단위로 측정헤르츠(Hz) : 1초에 클럭이 반복되는 횟수클럭이 '똑-딱-' 하고 1초에 한 번 반복되면 1Hz클럭이 1초에 100번 반복되면 100Hz   실제 CPU의 클럭 속도는 어떨까? 1초에 클럭이 기본적으로 25억(2.5x4 109)번, 순간적으로 최대 49억(4.9 x 1.. 공감수 0 댓글수 0 2024. 6. 28.
  • 명령어 사이클과 인터럽트 프로그램 속 명령어들은 일정한 주기가 반복되며 실행 된다. 이 주기를 명령어 사이클이라고 하며, 이 주기를 끊어내는 것을 인터럽트라고 한다. 명령어나 프로그램을 CPU가 처리하기 위해서는 가장 먼저 메모리에 있는 명령어를 가져와야 한다. 인출 사이클 : 가장 먼저 CPU로 가져온다.이렇게 가져온 명령어를 실행한다.실행 사이클 : 가져온 명령어를 실행한다. 일반적으로 CPU는 위 2가지 사이클이 계속해서 반복되며 동작한다. 인출-실행-인출-실행-...... 그런데 CPU로 명령어를 가지고 왔지만 바로 실행이 불가능한 경우도 있다.아래 그림과 같이 인출을 하더라도 추가적으로 메모리에 접근해야 하는 경우가 있다. ex) 간접 주소 지정 방식 이런 경우 간접사이클이 추가된다.   인터럽트CPU가 꼭 주목해야 할.. 공감수 0 댓글수 0 2024. 6. 27.
  • 레지스터 레지스터는 CPU 내부의 작은 임시저장장치로 프로그램 속 명령어와 데이터는 실행 전후로 레지스터에 저장된다. 로우레벨 개발자들은 레지스터에 들은 데이터를 확인할 일이 많다.  CPU 내부에는 다양한 레지스터들이 있고, 각기 다른 역할을 가진다. 레지스터의 종류는 CPU마다 다르며 공용으로 사용하는 레지스터도 있다. 반드시 알아야 할 레지스터에는 다음과 같은 것들이 있다.프로그램 카운터 : 메모리에서 가져올 명령어의 주소 (메모리에서 읽어 들일 명령어의 주소)명령어 레지스터 : 해설할 명령어 (방금 메모리에서 읽어 들인 명령어)메모리 주소 레지스터 : 메모리의 주소 (CPU가 읽어 들이고자 하는 주소를 주소 버스로 보낼 때 거치는 레지스터)메모리 버퍼 레지스터 : 메모리와 주고받을 값 (데이터와 명령어) .. 공감수 0 댓글수 0 2024. 6. 26.
  • ALU와 제어장치 ALU계산을 하기 위해서는 피연산자와 수행할 연산이 필요하다.ALU는 레지스터로부터 피연산자를 받아들이고, 제어장치로부터 제어 신호를 받아들인다. 결과값을 레지스터에 담아준다. 메모리가 아닌 레지스터에 저장하는 이유가 뭘까? CPU가 메모리에 접근하는 것 보다 레지스터에 접근하는것이 훨씬 빠르기 때문이다.  플래그에 대해 알아보자  ALU가 계산한 값이 음수라면 연산 결과가 음수다라는 플래그 값이 플래그 레지스터에 담기게 된다.    제어장치 - 받아들이는 정보 위에서 클럭이란 컴퓨터의 모든 부품을 일사불란하게 움직일 수 있게 하는 시간 단위이다. 명령어 레지스터라는 특수한 레지스터에 의해 해석할 명령어가 제어장치에 입력되게 된다. 받아들인 명령어를 해석하여 제어신호를 내보낸다. 여러 장치들의 제어신호를.. 공감수 0 댓글수 0 2024. 6. 25.
  • 소스 코드와 명령어 개발자가 작성한 소스 코드를 컴퓨터는 어떻게 실행할까?  개발자가 작성한 소스 코드는 고급 언어에 해당하고 이를 컴퓨터가 이해하고 실행할 수 있는 저급 언어로 변환을 해야한다. 저급 언어에는 2가지가 존재한다.저급 언어  1. 기계어0과 1로 이루어진 언어 = 명령어로 이루어진 언어이다. 위에 0과 1이 명령어라고 생각하면 된다.사람 입장에서 이것을 해석하는 것은 알기가 너무 어렵다. 이것을 조금 알아보기 쉬운 저급 언어로 변환한 것이 어셈블리어이다. 2. 어셈블리어 고급 언어 1. 컴파일 언어 고급언어가 컴파일러라는 특수프로그램에 의해 컴파일이 된다. 그렇게 되면 명령어로 이루어진 저급 언어로 변환이 된다.   2. 인터프리트 언어소스 코드를 한 줄씩 실행해주는 언어. (컴파일을 할 수 있는지 없는지 .. 공감수 0 댓글수 0 2024. 6. 24.
  • 0과 1로 문자를 표현하는 방법 0과 1밖에 모르는 컴퓨터가  어떻게 문자를 표현하고 이해할 수 있을까? 문자 집합과 인코딩문자 집합 (character set) : 컴퓨터가 이해할 수 있는 문자의 모음인코딩 (encoding) : 문자를 0과 1로 이루어진 문자 코드로 변환하는 과정디코딩 (decoding) : 0과 1로 표현된 문자 코드로 문자를 변환하는 과정 아스키 코드초창기 문자 집합 중 하나알파벳, 아라비아 숫자, 일부 특수 문자 및 제어 문자7비트로 하나의 문자 표현 (실제로는 8비트이지만 1비트는 오류 검출을 위해 사용되는 패리티 비트이다.)https://namu.wiki/w/%EC%95%84%EC%8A%A4%ED%82%A4%20%EC%BD%94%EB%93%9C 아스키 코드파일:attachment/1275273992_asc.. 공감수 0 댓글수 0 2024. 6. 21.
  • 0과 1로 숫자를 표현하는 방법 컴퓨터는 0과 1로 모든 연산을 처리하는데 어떻게 많은 일들을 처리할 수 있을까? 정보 단위비트(bit) : 0과 1을 표현하는 가장 작은 정보 단위 (=컴퓨터가 이해할 수 있는 가장 작은 정보 단위)  n비트로 2^n가지의 정보를 표현 가능하다.프로그램은 수많은 비트로 이루어져 있음비트보다 더 큰 단위가 존재한다. ex) 바이트, 킬로바이트, 메가바이트, 기가바이트 ... 워드(word)CPU가 한 번에 처리할 수 있는 정보의 크기 단위하프 워드(half word) : 워드의 절반 크기풀 워드(full word) : 워드 크기더블 워드(double word) :  워드의 두 배 크기  0과 1로 숫자를 표현하기이진법(binary)0과 1로 수를 표현하는 방법숫자가 1을 넘어가는 시점에 자리올림우리가 일.. 공감수 0 댓글수 0 2024. 6. 20.
  • 컴퓨터 구조를 알아야 하는 이유 프로그래밍 언어의 문법만 완벽하게 숙지한다면 좋은 개발자가 될 수 있지 않을까?하지만 컴퓨터의 구조와 운영체제에 대해 알지 못한다면 나사가 빠진 개발자가 될 수 밖에 없다. 컴퓨터의 구조와 운영체제를 알아야 프로그래밍을 근본적으로 이해하고 다양한 문제를 쉽게 해결할 수 있는 능력을 가지게 되기 때문이다. 컴퓨터 구조와 운영체제를 알아야 하는 이유문제 해결 능력이 향상된다.프로그래밍 언어의 문법만으로는 알기 어려운 성능/용량/비용을 고려하여 개발할 수 있다.운영체제의 작동 원리를 이해하여 하드웨어와 프로그램을 더 깊이 이해하고 문제 해결의 실마리를 찾을 수 있다. 컴퓨터의 구조를 간략하게 살펴보면 아래와 같이 나타낼 수 있다.여기에서 컴퓨터가 이해하는 두 가지 정보 중 데이터는숫자, 문자, 이미지, 동영상.. 공감수 0 댓글수 0 2024. 6. 19.
    문의안내
    • 티스토리
    • 로그인
    • 고객센터

    티스토리는 카카오에서 사랑을 담아 만듭니다.

    © Kakao Corp.