티스토리 뷰

반응형

프로세스와 스레드, 레지스터, 케쉬, 메모리에 대한 명확한 개념이 잡혀 있지 않거나 혼돈이 될때가 있는데, 도서관 책장을 기웃거리다 이 책의 목차와 내용을 대강 보면서 도움이 될것 같다는 느낌이 들어 빌려보았다. 

 

전자과를 나와서 컴퓨터 구조나 운영체제에 대하 공부했던 기억이 거의 사라졌는데, "교착상태"와 같은 몇몇 아직까지 잊혀짖 않은 단어를 봤을 때 "내가 대학교 다닐때 운영체제에 대한 수업도 들었었나보다..."하고 떠올릴 수 있었다. 

 

컴퓨터 구조와 운영체제에 대해서 그림과 함께 쉽게 잘 설명 되어있어 나같은 초급자에게 도움이 많이 된듯하다. 

 

 

기억하고 싶은 내용

CPU에서 가장 중요한 내부 구성요소

  • 산술논리연산장치(ALU)
  • 레지스터
  • 제어장치

보조기억장치와 입출력장치를 '컴퓨터 주변에 붙어있는 장치'라는 의미에서 주변장치(Peripheral device)라 통칭

 

2의 보수의 사전적 의미는 '어떤 수를 그보다 큰 2^n 에서 뺀 값''을 의미하며 쉽게 표현하자만 모든 0과 1을 뒤집고(여기까지가 1의 보수) 거기에 1을 더한값'으로 이해하면된다. 

 

아스키(ASCII) 코드는 1글자당 8bit로 표현된다. 2^7 개의 문자를 표현가능하며 1개의 비트는 패리티 비트로 오류 검출에 사용된다. 

 

완성형 인코딩 방식은 초성,중성, 종성을 조합으로 이루어진 완성된 글자에 고유코드를 부여하는 인코딩 방식.

조합형은 초성을 위한 비트열, 중성을 위한 비트열, 종성을 위한 비트열을 할당하여 그것을 조합으로 글자 코드를 완성하는 인코딩 방식

 

UTF-8은 통상 1바이트부터 4바이트까지의 인코딩 결과를 만들어낸다. 다시말해 UTF-8로 인코딩한 결과는 1바이트가 될수도 2바이트, 3바이트, 4바이트가 될 수도 있다. UTF-8로 인코딩한 결과가 몇 바이트가 될지는 유니코드 문자에 부여된 값의 범위에 따라 결정된다. 

 

CPU 안에는 당야한 레지스터들이 있다. 

  • 프로그램 카운터 : 메모리에서 읽어 들일 명령어의 주소를 저장
  • 명령어 레지스터 : 방금 메모리에서 읽어들인 명령어를 저장하는 레지스터
  • 메모리 주소 레지스터 : CPU가 읽어 들이고자 하는 주소값을 주소 버스로 보내기전에 저장하는 레지스터 
  • 메모리 버퍼 레지스터 : 메모리와 주고 받은 값(데이터와 명령어)를 저장하는 레즈스터 (메모리 데이터 레지스터라고도 부름)
  • 플래그 레지스터 : 연산 결과 또는 CPU 상태에 대한 부가적인 정보를 저장하느 레지스터 
  • 범용 레지스터 : 다양하고 일반적인 상황에서 자유롭게 사용되는 레지스터. CPU에는 여러개의 범용 레지스터가 있음
  • 스택 포인터 : 스택의 꼭대기를 가리키는 레지스터. 스택은 메모리 안에 있다. 정확히는 메모리 안에 스택처럼 사용할 영역이 정해져 있다. 이를 스택 영역이라고 한다. 이 영역은 다른 주소 공간과는 다르게 스택처람 사용하기에 암죽적으로 약속된 영역이다. 
  • 베이스 레지스터 : 베이스 레지스터 주소 지정 방식으로 주소를 접근할때 기분 주소를 저장하는데 사용하는 레지스터

인터럽트

  • 동기 인터럽트 : CPU에 의해 발생. CPU가 명령어르 수행하다가 예상치 못한 상황에 마주쳤을 때. Exception 라고도 부름. 세부적으로 폴트, 트랩, 중단, 소프트웨어 인터럽트가 있다. 
    • 폴트: CPU가 하던일을 중단하고 예외 처리. 처리 후 본래 하던 작업으로 돌아와 실행 재개
    • 트랩: 예외를 처리후 예외가 발생한 명령어의 다음 명령어부터 실행
    • 중단: CPU가 실행 중인 프로그램을 강제 중단시킬 수 밖에 없는 심각한 오류
    • 소프트웨어 인터럽트: 시스템 호출이 발생했을 때 나타남 
  • 비동기 인터럽트 : 주로 입출력장치에 의해 발생하는 인터럽트. 이책에서는 하드웨어 인터럽트라고 칭함. 

 

스레드 : 실행 흐름의 단위

  • 하드에어적 스레드 : 하나의 코어가 동시에 처리하는 명령어 단위
  • 소프트웨어적 스레드 : 하나의 프로그램에서 독립적으로 실행되는 단위. 가령 워드프로세서 프로그램을 개발할 경우, 사용자로부터 입력받는 내용을 화면에 표시하는 기능, 사용자가 입력한 내용을 맞춤법에 맞는지 검사하는 기능, 사용자가 입력한 내용을 수시로 저장하는 기능 등을 작동시키는 코드를 각각의 스레드로 만들면 동시에 실행 가능하다

명령어 처리 과정은 일반적으로 명령어 인출, 명령어 해석, 명령어 실행, 결과 저장 으로 나눌수 있는데, 이때 각 단계는 개별적으로 수행이 가능하여 마치 공장 생산 라인과 같이 명령어들을 파이프라인에 넣고 동시에 처리하는 기법을 ㅁ여령어 파이프라이닝이라 한다.

 

명령어 처리기법 : CPU를 효율적으로 작동 시키는 방법

  • 명령어 파이프 라이닝 : 동시에 여러개의 명령어를 겹쳐 실행하는 기법
  • 슈퍼 스칼라 : 여러개의 파이프라인을 포함한 구조
  • 비순차적 명려어 처리 : 파이프라이닝의 중단을 방지하기 위해 명령어들을 순차적으로 실행하지 않는 기법

ISA (Instruction Set Architecture) : CPU가 이해할 수 있는 명령어들의 모음. CPU 마다 ISA가 다를 수 있음 

CISC (Complex Instruction Set Computer) : 복잡한 명령어 집합을 활용하는 컴퓨터. x86, x86-64 가 대표적인 CISC 기반의 ISA. 명령어가 워낙 복잡하고 다양한 기능을 제공하는 탓에 명령어 크기와 실행되기까지의 시간이 일정하지 않음. 따라서 파이프라인 이 효율적으로 명령어를 처리할 수 없음 

RISC(Reduced Instruction Set Computer): 단순하고 적은 종료, 짧고 규격화된 명령어, 되도록 1클럭 내외로 실행되는 명령어르 지향. 파이프라이닝하기 쉬움

 

RAM

  • DRAM: Dynamic RAM 으로, 저장된 데이터가 동적으로 변하는(사라지는) RAM. 따라서 DRAM 은 데이터 소멸을 막기 위해서 일정 주기로 데이터를 재활성화 해야함
  • SRAM: Static RAM. 저장된 데이터가 변하지 않는 RAM. DRAM보다 일반적으로 속도가 빠름
  • SDRAM: Synchronous Dynamic RAM. 클럭 신호와 동기화된 DRAM. 
  • DDR SDRAM: SDRAM 에서 대역폭을 넓혀 속도를 더 빠르게 만든 것 DDR. DDR 보다 2배 더 높은 것이 DDR2, DDR2 보다 2배더 높은 것이 DDR3

캐시 메모리(cache memory) 는 CPU와 메모리 사이에 위치하고, 레지스터보다 용량은 크고 메모리보다 빠른 SRAM 기반의 저장 장치. 컴퓨터 내부에는 여러개의 캐시 메모리가 존재하며, 코어에서 가장 가까운 캐시 메모리를 L1 캐시, 그다음 가까운 캐시 메모리를 L2 캐시, 그다음 가까운 캐시 메모리를 L3 캐시 라고 부른다. 

 

프로그래머가 꼭 알아야할 컴퓨터 시간들....중에서

L1 캐시 참조 시간 0.5ns
L2 캐시 참조 시간 5ns
메모리 참조 시간 7 ns
메모리에서 1MB 를 순차적으로 읽는 시간 250 us
하드디스크 탐색 시간 10ms
하드디스크 1MB를 순차적으로 읽는 시간 20ms
한 패킷이 캘리포니아에서 네덜란드까지 왕복 시간 150 ms

 

 

요즘에는 플래시 메모리 기반의 보조기억 장치 또한 많이 사용한다. USB, SD카드, SSD가 모두 플래시 메모리 기반의 보조 기억장치이다. 플래시 메모리는 NAND 플래시 메모리와 NOR 플래시 메모리가 있다. 

 

RAID(Redundant Array of Independent Discks)

데이터 안정성 혹은 높은 성능을 위해 여러개의 물리적 보조기억장치를 마치 하나의 논리적 보조기억장치처럼 사용하는 기술

  • RAID0 : 데이터를 단순 병렬로 분산하여 저장
  • RADI1: 완전한 복사본을 만듦
  • RAID4: 패리티를 저장한 장치를 따로 두는 방식
  • RAID5: 패리티를 분산하여 자장하는 방식
  • RAID6: 서로 다른 패리티를 두느 방식

운영체제는 컴퓨터가 부팅될 때 메모리 내 커널 영역(Kernel space)이라는 공간에 딸 적재되어 실행된다. 커널 영역을 제외한 나머지 영역, 사용자가 이용하는 응용 프로그램이 적제되는 영역을 사용자 영역이라고 한다. 

 

이중 모드란 CPU가 명령어를 실행하는 모드를 크게 사용자모드와 커널모드로 구분하는 방식이다. 사용자 모드는 운영체제 서비스를 제공받을 수 없는 실행 모드다. 커널 모드는 운영체제 서비스르 제공받을 수 있는 모드다. 즉 커널 영역의 코드르 실행할 수 있는 모드다. 사용자 모드로 실행되는 프로그램은 시스템 호출(system call)을 통해 커널 모드로 전환하여 시스템 서비스를 제공 받을 수 있다. 

 

시스템 호출은 일종의 인터럽트다. 정확히는 소프트웨어 인터럽트다.

시스템 호출의 종류

  • 프로세스 관리: 자식 프로세스 생성, 프로세스 실행, 프로세스 종료, 대기
  • 파일관리: 파일 열기, 닫기, 읽기, 쓰기, 파일 정보 획득
  • 디렉터리 관리: 작업 디렉터리 변경, 디렉터리 생성, 디렉터리 삭제
  • 파일 시스템 관리: 파일 시스템 마운트, 마운트 해제

 

프로세스가 생성되면 메모리의 커널 영역에 PCB(Process Control Block)가 생성된다. 그리고 사용자 영역에는 코드영역, 데이터 영역, 힙영역, 스택 영역으로 나뉘어 저장된다. 

코드영역에는 기계어로 이루어진 명령어가 저장된다. 데이터가 아닌  CPU가 실행할 명령어가 담겨 있기 때문에 쓰기 금지되어있다. 다시 말해 코드 영역은 읽기 전용 공간이다. 

데이터 영역은 잠깐 썼다가 없앨 데이터가 아닌 프로그램이 실행되는 동안 유지할 데이터가 저장되는 공간이다. 전역변수가 대표적이다. 코드 영역과 데이터 영역은 그 크기가 변하지 않는다. 프로그램을 구성하는 명령어들이 갑자기 바뀔일이 없으니 코드 영역의 크기가 변할 리 없고, 데이터 영역에 저장될 내용은 프로그램이 실해오디는 동안에만 유지될 데이터이니. 그래서 코드 영역과 데이터 영역은 '크기가 고정된 영역'이라는 점에서 정적 할당 영역이라고도 부른다. 반면 힙, 스택 영역은 프로세스 실행과정에서 그 크기가 변할 수 있는 동적 할당 영역이다. 

 

힙 영역(heap segment)은 프로그램을 만드는 사용자, 즉 프로그래머가 직접 할당 할 수 있는 저장 공간이다. 

스택 영역(stack segment)은 데이터를 일시적으로 저장하는 공간이다. 데이터 영역에 담기는 값과는 달리 잠깐 쓰다가 말 값들이 저장되는 공간이다. 이런 데이터는 함수의 실행이 끝나면 사라지는 매개변수, 지역변수가 대표적이다. 

 

 프로세스끼리는 기본적으로 자원을 공유하지 않지만, 스레드끼리는 같은 프로세스 내의 자원을 공유

스레드들은 각기 다른 스레드ID, 프로그램카운터 값을 포함한 레지스터값, 스택을 가질 뿐 프로세스가 가지고 있는 자원(메모리 상의 코드, 데이터, 힙 영역 및 파일)을 공유한다.

 

운영체제의 프로세스 관리 서비스 중 가장 중요한 두가지는 스케줄링과 동기화 

CPU 스케줄링: 공정하고 합리접으로 CPU 자원을 배분하는 방법

동기화: 특정 자원에 접근할 때 한개의 프로세스만 접근하게 하거나 프로세스를 올바른 순서대로 실행하게 하는 것

 

스와핑: 메모리에서 사용하지 않는 일부 프로세스를 보조기억 장치로 보내고 실행할 프로세스를 메모리로 들여보내는 관리 기법

 

페이징: 물리 주소 공간을 프레임 단위로 자르고, 프로세스의 논리 주소 공간을  (프레임과 동일한 크기를 가지는 )페이지 단위로 자른뒤 각 페이지를 프레임에 할당하는 가상 메모리 관리 기법

 

포매팅이란 파일 시스템을 설정하여 어떤 방식으로 파일을 저장하고 관리할 것인지를 결정하고 새로운 데이터를 쓸 수 있게 하는 작업을 의미 

 

연결 할당 : 각 블록 일부에 다음 블록의 주소를 저장하여 블록들을 연결 리스트 형태로 관리하는 방식

FAT 파일 시스템: FAT(File Allocation Table)를 이용하는 연결 할당 기반의 파일 시스템

 

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함