컴퓨터 시스템

[컴퓨터 시스템] 컴퓨터 시스템 개괄

우디혜 2020. 10. 6. 23:04

컴퓨터 시스템은 응용프로그램을 실행하기 위해 함께 동작하는 하드웨어 & 시스템 소프트웨어로 구성

프로그램

  • 소스 프로그램(바이너리 파일 - non text file )

    • 0, 1로 이루어진 비트들로 구성

    • 데이터의 저장과 처리를 목적으로 함

  • 텍스트 파일(text file - EX hello.c )

    • byte 단위(8 bits)로 구성

    • 오로지 ascii 문자들로 구성

 

프로그램 생성
 - 사용자가 에디터에서 소스 프로그램(바이너리 파일)을 생성하고 내부적으로는 텍스트 파일 형태로 저장

프로그램 실행
 - 텍스트 파일이 컴파일러와 링커에 의해 바이너리 실행파일로 번역

 

컴파일 시스템

  • 소스 파일(hello.c) -> 실행파일(hello)로 번역하는 시스템

  • 전처리기, 컴파일러, 어셈블러, 링커 로 구성

 

시스템 하드웨어 조직

버스(Bus)

    • 시스템의 요소들을 잇는 역할

    • word 단위로 데이터 전송 ( 기본 시스템 변수 ==  32bits 혹은 64bits )

메인 메모리

    • 프로세서가 프로그램을 실행하는 동안 데이터 혹은 프로그램을 모두 저장하는 임시 저장장치

    • DRAM(dynamic random access memory) 칩들로 구성

프로세서

  • 주처리장치(CPU)라고도 불린다

    • 엄밀히 말하면 다르지만, CPU의 핵심적인 부분인 연산(Control Unit)제어(ALU, Arithmetic Logical Unit)를 담당하기 때문

  • 메인 메모리에 저장된 인스트럭션들을 해독(실행)

  • 반복 

    • 프로그램 카운터(PC)가 가리키는 곳을 실행

    • 다음 인스트럭션의 위치를 가리키도록 PC값 업데이트

  • CPU 작업 예시

    1. load : 메인 메모리 -> 레지스터

    2. Store : 레지스터 -> 메인 메모리

    3. Operate(작업) : 두 레지스터 값을 ALU로 복사한 뒤 연산 수행

    4. Jump : 인스트럭션의 주소값을 PC에 덮어쓰기하여 PC의 위치를 이동시킨다

캐시 메모리 (CPU 내부)

    • 프로세서-메모리 간 격차에 대응하기 위해 등장

    • 프로세서가 단기간에 필요로 할 가능성이 높은 정보를 임시로 저장

    • L1, L2 cache - SRAM(Static Random Access Memory)라는 하드웨어 기술 이용하여 구현

    • register file은 L0

 

운영체제

  • 응용 프로그램이 효율적으로 잘 작동할 수 있게 응용 프로그램이 요청하는 시스템 자원(System Resource)을 효율적으로 분배 · 관리 혹은 CPU 시간을 할당 하는 등의 역할을 한다. 

 

⁎ 소프트웨어 ⊃ 운영체제, 응용 프로그램

⁎ 응용 프로그램 : PC에 있는 프로그램 혹은 모바일 APP 등 우리가 흔히 사용하는 프로그램들

 

운영체제는 사용자 인터페이스 제공

쉘(shell)

  • 사용자의 요청을 받아, OS에 넘겨주는 등 사용자가 운영체제 기능을 조작할 수 있도록 인터페이스를 제공하는 프로그램이다. (User - OS 커뮤니케이션을 도와주는 역할)

  • 다른 응용프로그램들과 마찬가지로 일종의 응용 프로그램이다.

SW User   User Space
Application Shell  
API  
System Call  
OS   Kernel Space
HW Hardware  

 

운영체제는 응용프로그램을 위해서도 인터페이스 제공

API(Application Programming Interface)

  • 프로그래밍 언어를 사용하여 API를 매개로 응용프로그램과 OS 간의 커뮤니케이션이 가능하다

  • 함수로서 제공

  • 함수들이 많기 때문에 주로 API가 라이브러리(library) 형태로 제공

  • 응용 프로그램이 OS에 요청하는 기능들의 집합이라고 봐도 무방

    • C언어로된 API 즉, C library에 있는 printf() 호출 -> OS에서 printf() 요청을 수행

시스템 콜(System Call)

  • 시스템 호출 인터페이스

  • 운영체제가 운영체제의 각 기능들을 사용할 수 있도록 시스템 콜이라는 명령 혹은 함수를 제공 

  • API 내부에는 시스템 콜을 기반으로(호출) 하는 경우가 대부분

  • 응용 프로그램은 운영체제 기능 필요시 API를 사용하여 프로그램 작성

  • 응용 프로그램이 실행되고, 운영체제 기능이 필요한 API를 호출하면 시스템 콜이 호출되고 커널모드로 변경되어 OS기능을 사용한다. Exception 중 Trap에 해당하는 상황이다. 즉, 트랩 핸들링을 통해 커널모드가 실행될 수 있다.

리눅스 메뉴얼 페이지의 open() 함수 설명

 

 인터페이스 : 두 시스템 사이에서 커뮤니케이션을 담당하는 매개체, 대부분 추상화되어 존재한다

 

시스템 콜은 운영체제 기능을 호출하는 함수(찐 액기스) / API는 각 언어별로 운영체제 기능을 호출하는 인터페이스 함수(찐 액기스를 섭취하기 위해 다양한 형태로 음료를 만들어놓은 것)

 

 

CPU 권한 모드

  1. 사용자 모드 (User mode) : 응용 프로그램이 CPU를 사용할 때

  2. 커널 모드 (Kernel mode) : OS가 CPU를 사용할 때

    • 특권 명령어 실행

    • 원하는 작업수행을 위한 자원 접근을 가능하게 함

    • 커널 모드를 실행하려면 반드시 시스템 콜을 사용해야함

 

PCB (Process Control Block)

프로세스 상태 정보를 저장하는 곳으로 주로 PID (Process Id), 주요 레지스터 (pc, sp 등), 스케줄링 정보(process state), 메모리 정보 등을 저장할 수 있다.

 

Context Switching

  • Context : 프로세스가 실행하는 데 필요한 모든 상태 정보(PC, register file, main memory ... etc)

  • CPU가 다수의 프로세스를 동시에 실행하는 것처럼 보이게 해줌( multi-tasking )

  • 현재 프로세스의 context를 저장, 다른 새로운 프로세스로 context를 복원

  • 전환(스케줄링)은 운영체제의 커널(Kernel)에 의해 관리 됨

    • 컴퓨터가 system call 실행하여 커널에 제어권 넘겨줌

  • 과정

    1. 현재 실행되고 있는 프로세서의 PCB에 현재 프로세서의 상태정보를 복사

    2. CPU에 새로 실행할 프로세스의 PCB 정보를 복사하여 문맥을 전환한다.

 

Thread

  • 프로세스는 Thread라는 다수의 실행 유닛으로 구성

  • 각각의 쓰레드는 해당 프로세스의 컨텍스트에서 실행되고, 동일한 코드와 전역(global) 데이터를 공유

  • 멀티 쓰레딩 : 하나의 CPU(프로세서)가 여러 개의 제어 흐름을 실행 (각 thread가 프로세스의 메모리 공유)

  • 멀티 프로세서 : 여러 개의 CPU(프로세서)로 여러 개의 제어 흐름을 실행 (각 프로세스가 독립적인 메모리 가짐)

 

가상 메모리

아래에서부터, 주소 값이 가장 작은 부분부터

 

    • 프로그램 코드 & 데이터

    • 힙 (run-time heap)

      • 런타임에 동적으로 크기가 변동 (주로 malloc, free로 인해)

    • 공유 라이브러리

    • 스택 stack

      • 컴파일러가 함수 호출을 위해 사용하는 사용자 stack

      • 함수 호출 - 스택 증가 // 리턴시 - 스택 감소

    • 커널 가상 메모리

 


 

Computer Systems, A Programmer's Perspective - Bryan & O'Hallaron 책으로 공부하는 중

fast campus OS 강의도 함께 듣는 중