컴퓨터 구조의 설계와 구현

컴퓨터 하드웨어의 구성

  • 중앙 처리 장치(CPU)
  • 주기억장치 (RAM/ROM)
  • 보조기억장치 (HDD/SSD 등)
  • 입출력장치 (키보드 마우스 모니터 등)

CPU

  • 제어장치 : 명령어를 해석해 그 실행에 필요한 제어 신호 발생
  • ALU : 산술 및 논리 연산 수행
  • 레지스터 : 연산의 대상 및 연산 결과 저장

명령어 집합 구조

ISA(Instruction Set Architecture)

  • 마이크로 프로세서가 인식해서 기능을 이해하고 실행할 수 있는 명령어
  • CPU가 표현할 수 있는 자료형 정의
  • CPU에 명령할 수 있는 기계어 명령어들의 종류 정의
  • 주소지정법 정의
  • 기계어 명령어는 사람들이 알아보기 불편하므로 주로 어셈블리로 표현
  • 같은 ISA를 가지는 컴퓨터에는 같은 프로그램을 실행 가능

마이크로 아키텍처

  • 명령어 집합 구조를 물리적으로 표현한 것
  • 같은 ISA를 서로 다른 마이크로 아키텍처로 구현하기도 함 (Intel vs AMD)

명령어의 기능 및 종류

  • 산술 및 논리 연상 명령 : ADD, SUB, MUL, DIV, AND, OR, NOT 등
  • 데이터 전송 명령 : 레지스터/메모리/입출력 장치 사이에 데이터 전송
  • 실행 제어 명령 : 프로그램의 실행을 순차에서 벗어나 다른 곳으로 옮김, 브랜치, 정프 등
  • 기타 : 인터럽트 제어, 명령어 실행 권한 변경

RISC vs CISC

CISC

  • 여러 동작을 한번에 할 수 있는 여러 가지 명령어들을 제공
  • 명령어들의 형식과 길이가 다양하고, 주소 지정 방식도 다양함
  • 주로 마이크로프로그램 제어 방식의 프로세서로 구성

RISC

  • 고정된 길이의 최소 종류의 명령어들을 제공
  • 주소 지정 방식 최소화, Load/Store 방식의 메모리 접근
  • 한 클록 사이클에 하나의 명령을 실행할 수 있도록 설계

명령어 파이프라인

실행 단계

  • 모든 명령어들의 실행을 동일한 단계로 나눈다
  • 한 클록 사이클에 한 단계씩 진행하도록 한다
  • 동시에 여러 명령어들의 서로 다른 단계를 실행한다

메모리 주소 공간

메모리 내 바이트마다 독립된 주소를 부여한다

프로그램의 번역과 실행

프로그래밍 언어의 분류

  • 고수준 프로그래밍 언어 : Java, C++, Python 등
  • 어셈블리
  • 기계어
  • 고수준 일수록 사람이 생각하는 방식과 가깝고, 기계가 바로 이해할 수 있는 언어는 사람이 이해하기 임들며, 어셈블리어는 기계어를 거의 1:1로 사람이 이해할 수 있을만한 기호로 표현한다.

프로그램의 번역

원시 코드

  • 고수준 프로그래밍 언어 이용
  • 프로그래머가 작성
  • 어느 기계에 실행할지에 따라 크게 다르지 않음

목적 코드

  • 기계가 이해할 수 있는 명령어들의 집합
  • 0과 1로 구성
  • 서로 다른 컴퓨터에서 다르게 표현

프로그램의 번역 단계

원시코드 > 어셈블리 코드 단계

  • 프로그래밍 언어에 따라 다른 번역기
  • 구문 구조를 해석하고 특정 기계를 대상으로 어셈블리 코드 생성

어셈블리 코드 > 목적 코드 단계

  • 어셈블리에 의해 거의 1:1 번역

컴파일러와 인터프리터

  • 컴파일러 : 원시코드를 실행코드로 번역해준다
  • 인터프리터 : 원시코드를 실행시킬때 사용한다

컴파일러 방식의 장점

  • 번역을 실행 이전에 해 두므로 코드를 공들여 최적화 할 수 있다
  • 코드 실행의 효율이 높다

인터프리터 방식의 장점

  • 다른 컴퓨터로 옮겨 실행하는 것이 편리하다
  • 대화형 개발이 가능하다

가상기계를 이용한 실행 모델

  • 컴파일러 방식과 인터프리터 방식의 장점을 취하려는 의도이다
  • 컴파일러에 의해 코드 최적화 가능, 실행효율 높음
  • 동일한 모델의 가상기계를 운용하는 다른 컴퓨터에서도 실행 가능하다
  • 네트워크를 통해 코드를 공유하는 것도 일반적이다

링커와 로더

  • 링커 : 여러 덩어리의 목적 코드를 연결, 서로 다른 모듈 사이의 주소 상호 참조를 해결
  • 로더 : 프로그램 파일을 저장 장치로부터 메모리에 적재, 동적 적재 문제도 해결

라이브러리

  • 많은 프로그램들이 공히 이용하는 기능을 담당하는 소프트웨어를 모듈화하여 준비해 둔 것
  • 콘솔 및 파일 입출력
  • GUI
  • 수학 연산
  • 인터넷 접근
  • 데이터 분석

운영체제의 역할과 구조

소프트웨어의 분류

시스템 소프트웨어

  • 기능 : 컴퓨터 시스템을 운용하거나 소프트웨어 개발을 지원하는 데 이용되는 소프트웨어의 모음
  • 종류 : 운영체제, 컴파일러, 링커/로더, 시스템 운용 도구들

응용 소프트웨어

  • 기능 : 컴퓨터 시스템이 응용될 분야에 따른 기능을 수행하도록 만들어진 소프트웨어
  • 종류 : 워드 프로세서, 스프레드시트, 웹 브라우저, 게임 등

OS(운영체제)

컴퓨터 시스템이 살아가기 위해 반드시 필요한 소프트웨어

역할

  • 컴퓨터 시스템 자원 관리
  • 사용자에게 시스템 자원을 활용할 수 있는 기능 제공

종류

  • Windows
  • MacOS
  • Unix
  • Linux
  • IOS
  • ANDROID 등

분류

  • 운용 대상 시스템이 어떤 종류인가에 따라 : 범용/내장형
  • 여러 사용자들에 대해 서비스를 제공하는가 여부 : 단일/다중 사용자
  • 여러 개의 중앙처리장치로 이루어진 시스템 지원 여부 : 단일/다중 프로세서
  • 어떤 방식으로 복수의 작업을 행할지에 따라 : 시분할 방식/다중 프로그래밍

운영체제 커널

  • 운영체제의 핵심 부분에 위치
  • 시스템의 모든 측면에 대한 완전한 권한
  • 사용자간 충돌 혹은 침해로부터의 보호와 함께 효율적이면서 공정한 자원 공유 담당
  • 시슽메 자원에 대한 완전한 제어권을 구사하기 위한 하드웨어의 지원 필요
  • 커널 외의 부분을 이루는 코드는 시스템 자원 접근을 위해 커널의 서비스 이용

시스템 콜

  • 운영체제 커널이 제공하는 서비스에 대한 응용 프로그램의 요청을 가능하게 하기 위한 프로그래밍 인터페이스
  • 응용 프로그램은 보통 고급 API 함수들을 통해 시스템 호출에 접근
  • 시스템 콜의 호출은 프로세스 실행 문맥을 특권 모드로 전환

프로세스 관리와 스케줄링

프로세스

  • 프로세스란 컴퓨터 시스템에서 CPU 및 메모리를 이용하여 "실행 중인" 작업
  • 컴퓨터 시스템에서 실행되는 모든 소프트웨어는 하나 이상의 프로세스를 이룸
  • 프로세스는 라이프 사이클을 가지며, 이것은 운영체제가 관리
  • 프로그램과의 차이 : 프로그램은 실행이 준비된 소프트웨어 덩어리며, 프로세스는 실행하고 있는 소프트웨어의 생명체다.

프로세스 관리

운영체제는 각 프로세스 상태를 유지 관리하고, 각 프로세스가 시스템 자원을 사용할 수 있도록 관리한다.

동시성

  • 동시성을 가지는 일들을 처리할 때는 동기화가 필요하다
  • 운영체제의 매우 중요한 임무중 하나이다

스케줄링

  • 스케줄링 문제 : 어느 순간 어느 작업을 수행할 지 결정하는 문제
  • 효율성과 공정성 사이의 이해득실 관계
  • 응답시간 최소화 : 각 작업이 도착했을 때로부터 완료된 때까지의 시간이 중요
  • 시스템 처리율 극대화 : 문맥 전환의 오버헤드를 고려하면 응답시간과 같은 기준이 아님
  • 공정성 해치지 않기 : 자칫 우선순위가 낮은 작업은 영원히 기다리게 될수도 있음

FCFS

First Come First-serced scheduling
먼저 온 요청을 먼저 처리하는 방식

SJF

Shortest Job First
지금 시작할 수 있는 작업들 중 가장 작업량이 적은 것을 선택해서 스케줄

SRTF

Shortest Remaining Time First
새로운 작업이 도착하고 이것을 더 빨리 끝낼 수 있으면 문맥 전환
매 순간 남아 있는 작업량이 가장 적은 것을 선택해 스케줄

메모리와 입출력 관리

컴퓨팅 시스템 자원의 추상화

  • 프로세스 : CPU 시간에 대한 추상화
  • 가상메모리 : 메모리 공간에 대한 추상화
  • 파일시스템 : 입출력 장치들을 일관된 인터페이스로 추상화

메모리 계층 구조와 가상 메모리

메모리 계층 구조

상위에 있을수록 빠른 접근속도를, 하위에 있을수록 낮은 비트당 비용을 가진다.

  • 레지스터 : CPU 안에 있으며, 하드웨어에 의해 제어
  • 캐시 메모리 : CPU 안 또는 매우 가까이 존재하며, 하드웨어에 의해 제어
  • 주기억장치(메인 메모리) : CPU와 메모리 버스로 연결되어 있으며, 하드웨어에 의해 제어
  • 보조기억장치(스토리지) : 운영체제와 하드웨어의 협력에 의해 주기억장치에 대한 가상화 제공

가상 메모리

프로세스에 메모리를 할당해 주고 프로세스가 반환하는 메모리를 "이용 가능한 것"으로 관리하고 서로 다른 프로세스가 남의 메모리를 침범하지 못하도록 하는 일들은 운영체제의 몫이다

요구 페이징

  • 페이지 폴트를 줄이는 것은 전체 시스템 성능 향상에 중요하다
  • 지역성에 근거해 메모리 페이지들을 저장 장치로부터 읽어들여 메모리에 적재
  • 캐시 메모리의 관리와 유사한 방법
  • 교체 기법에 LRU 및 이를 근사화한 알고리즘 적용

참조의 지역성

  • 시간적 지역성 : 지금 참조된 주소는 가까운 미래에 또 참조될 가능성이 높다
  • 공간적 지역성 : 지금 참조된 주소와 가까운 주소가 미래에 참조될 가능성이 높다

파일 시스템

  • 저장 장치는 입출력장치와는 조금 다른 특성을 가진다
  • 운영체제는 저장장치를 파일시스템으로 추상화한다
  • 많은 종류들의 장치들을 파일로 간주하는 추상화 방식을 통해 일관된 방법으로 장치에 접근할 수 있도록 관리한다

0개의 댓글

Powered by GraphCDN, the GraphQL CDN