본문 바로가기

프로그래머스 데브코스

[클라우딩 어플리케이션 엔지니어링 TIL] 2. 컴퓨터의 구조와 운영체제

1.학습 주제

  • 컴퓨터 하드웨어는 어떻게 이루어져 있는가?
  • ISA의 정의와 나타내는 것
  • 명령어의 기능과 처리방식
  • 프로그램 번역은 어떻게 이루어지는가?
  • 링커와 로더는 무엇인가?
  • 운영체제의 정의, 역할, 분류
  • 커널은 무엇인가?
  • 프로세스란?
  • 멀티스레드
  • 자원의 추상화는 무엇인가?

2.주요 메모 사항 소개

      • 컴퓨터 하드웨어는 어떻게 이루어져 있는가?
        • 중앙처리장치(CPU)
          • 제어장치:명령어를 해석하여 그 실행에 필요한 제어 신호를 발생시킴
          • 산술논리연산장치(ALU) : 산술 및 논리 연산 등을 수행
          • 레지스터(registers): 연산의 대상(operand) 및 연산 결과 등을 저장
        • 주기억장치(Memory(RAM/ROM))
        • 보조기억장치(Storage(SSD,HDD)
        • 입출력장치(키보드,마우스 등)

컴퓨터 하드웨어 구조

    • ISA 정의와 나타내는 것
      • ISA(Instruction Set Architecture)는 마이크로프로세서가 인식해서 기능을 이해하고 실행할 수 있는 (기계어)명령어들의 집합
      • CPU가 표현할 수 있는 자료형, CPU에 명령할 수 있는 기계어 명령어들의 종류, 주소지정법 등을 정의한다.
      • 사람이 알아보기 쉽게 어셈블리로 표현
      • 같은 ISA를 가지는 컴퓨터는 같은 프로그램을 실행할 수 있다.
      • ※ 마이크로아키텍처: 명령어 집합 구조를 물리적으로 구현한 것, 같은 ISA라도 서로 다른 마이크로아키텍처로 구현할 수 있음.
    • 명령어의 기능과 처리방식
      • 명령어의 기능으로는 산술/논리 연산 명령, 실행 제어 명령(브랜치, 점프), 데이터 전송 명령, 인터럽트 제어, 실행 권한 변경 등이 존재.
      • 명령어를 처리하는 CPU 설계 방식에는 2가지가 존재
        1. CISC(Complex Instruction Set Computing)
          • 여러 동작을 한꺼번에 할 수 있는 여러 가지의 명령어들을 제공
          • 명령어들의 형식과 길이가 다양하고, 주소 지정 방식도 다양함
          • 주로 마이크로프로그램 제어 방식의 프로세서로 구성
        2. RISC(Reduced Instruction Set Computing)
          • 고정된 길이의 최소 종류의 명령어들을 제공
          • 주소 지정 방식, 최소화,Load/Store 방식의 메모리 접근
          • 한 클록 사이클에 하나의 명령을 실행할 수 있도록 설계
      • 명령어 파이프라인: 한 번에 하나의 명령 실행이 아닌 하나가 실행되고 있을 때 다른 명령 실행을 시작하는 식으로 여러 개의 명령을 동시에 실행하는 방식. RISC 프로세서가 CISC보다 효율이 좋음.

명령어 파이프라인[1]

      • 프로그램 번역은 어떻게 이루어지는가?

프로그램 번역

        • 원시코드: 고수준 프로그래밍 언어 이용, 프로그래머가 작성, 어느 기계에 실행할지에 따라 크게 다르지 않음
        • 어셈블리코드: 프로그래밍 언어에 따라 다른 번역기로 번역, 구문 구조를 해석하고 특정 기계를 대상으로 어셈블리 코드를 생성, 어셈블러에 의해 목적코드와 거의 1:1 번역.
        • 목적코드: 기계가 이해할 수 있는 명령어들의 집합, 0과 1만으로 이루어진 코드의 나열, 서로 다른 컴퓨터에서 다르게 표현됨.
        • 프로그램 번역/실행의 모델
          1. 컴파일러 방식: 실행하기 전 원시코드를 컴파일러가 번역하고 실행한다. 장점으로 공들여 최적화하여 코드 실행의 효율이 높다.
          2. 인터프리터 방식: 실행할 때 원시코드를 인터프리터가 번역하고 실행한다. 장점으로는 다른 컴퓨터로 옮겨 실행하는 것이 편리하며 대화형 개발이 가능
          3. 이 두 가지의 장점을 채택한 방법들도 이용됨(가상기계를 이용한 실행모델)
      • 링커와 로더는 무엇인가?
        • 링커(linker): 여러 개의 목적 코드를 연결하는 역할, 주소 상호 참조를 해결하며 보통 컴파일러와 함께 실행됨.
        • 로더(loader): 프로그램 파일을 저장장치로부터 메모리에 적재하는 역할, 동적 적재 문제도 해결하고 운영체제의 일부로서 프로그램 실행 담당.
        • ※라이브러리(Libraries): 많은 프로그램들이 공히 이용하는 기능을 담당하는 소프트웨어를 모듈화하여 준비해 둔 것
      • 운영체제의 정의, 역할, 분류
        • 정의: 컴퓨터 시스템이 살아가기 위하여 반드시 필요한 소프트웨어
        • 역할: 컴퓨터 시스템의 자원을 관리(프로세스 관리, 메모리 관리, 파일 시스템 관리, 입출력 장치 관리), 사용자에게 시스템 자원을 활용할 수 있는 기능을 제공(텍스트 에디터, 시스템 관리 도구, 소프트웨어 개발도구(환경))
        • 분류: 운용대상에 따라(범용/내장형), 사용자의 범위에 따라(단일 사용자/다중 사용자), 중앙장치의 갯수에 따라(단일 프로세서/다중 프로세서), 복수의 작업 방식에 따라(사분할 방식/ 다중 프로그래밍)
      • 커널은 무엇인가?

커널의 구조

  • 운영체제의 핵심 부분에 위치하며 시스템의 모든 측면에 대한 완전한 권한을 가지고 있음.
  • 사용자 (및 프로세스) 간 충돌 또는 침해로부터의 보호와 함께 효율적이면서 공정한 자원 공유(배분) 담당.
  • 시스템 콜(System Calls)을 통한 커널 조작을 통해 핵심 부분에 접근 가능.
  • 프로세스란?
    • 정의: 컴퓨터 시스템에서 CPU 및 메모리를 이용하여 실행 중인 작업.
    • 거의 모든 소프트웨어는 하나 이상의 프로세스를 이룸.
    • 운영체제는 각 프로세스의 상태를 유지관리함.
    • 프로세스의 상태는 다음 그림과 같다.

프로세스의 상태[2]

  • 멀티스레드
    • 하나의 프로세서에서 여러 개의 스레드를 사용하여 병렬적으로 효율을 증가시킬 수 있는 방법.
    • 멀티스레드를 사용하기 위해서는 동시성(Concurrency)과 스케줄링이 중요.
    • 스케줄링의 경우 공정성과 효율성의 사이의 이해득실을 따지는게 중요.
    • 공정성을 위반할 경우, 우선순위가 낮은 프로그램은 영원히 작동하지 않을 수 있다. 예시)SJF
  • 자원의 추상화란?
    • 여러 개의 자원을 하나로 여기거나 하나의 자원을 여러 개의 자원으로 나뉜 것으로 생각하는 것.
    • 프로세스(CPU 시간에 대한 추상화), 가상메모리(메모리 공간에 대한 추상화, 페이징), 파일시스템(입출력 장치들을 일관된 인터페이스로 추상화)
    • 사용하는 이유? 효율적이기 때문. 대표적으로 클라우드 서비스가 존재.

3. 공부하며 느낀 점

컴퓨터를 공부하면서 이쪽부분을 처음 배웠는 데 몇몇 궁금증이 해소되는 계기가 되었다.

4.출처

[1]:https://commons.wikimedia.org/wiki/File:Fivestagespipeline.png

 

File:Fivestagespipeline.png - Wikimedia Commons

 

commons.wikimedia.org

[2]:https://commons.wikimedia.org/wiki/File:Process_states.svg

 

File:Process states.svg - Wikimedia Commons

 

commons.wikimedia.org