2017년 3월 19일 일요일

07. 운영체제의 서비스

1) 운영체제 서비스(Operating System Services)

 * 프로세스 관리 (Process Management)
 * 주기억장치 관리 (Main Memory Management)
 * 파일 관리 (File Manaement)
 * 보조기억장치 관리 (Disk Management)
 * 입출력 장치 관리 (I/O Management)
 * 네트워킹 (Networking)
 * 보호 (Protection)
 * 기타 등등 ...

Operating System Services


 [프로세스 관리]
  : 프로세스 생성(creation), 삭제(deletion), 일시 중지(suspend) 및 재개(resume)
  : 프로세스간 통신, 동기화(Synchronization)
  : 교착상태 처리(deadlock handling)

 [주기억장치 관리]
  : 프로세스에 메모리 할당(allocation) 및 회수
  : 메모리의 효율적 사용
  : 가상 메모리 관리

 [파일 관리]
  : 파일 및 디렉토리의 생성(creation)과 삭제(deletion)
  : 파일의 조작 지원 - open, close, read, write, create, delete
  : Track, Sector 와 File의 매핑(mapping)
  : File Backup

 [디스크 관리 / 보조기억 장치 관리]
  : 빈 공간 관리(free space management)
  : 저장 공간 할당(storage allocation)
  : 디스크 스케쥴링(disk scheduling)

 [입출력 장치 관리]
  : 장치 드라이버(device drivers) 관리
  : 입출력 장치의 성능 향상 - Buffering, Caching, Spooling

 [시스템 호출(System Call)]
  : 일반 어플리케이션(사용자 프로그램)이 하드웨어 사용을 위해 운영체제의 서비스를 호출하는 것.
  : 사용자 프로그램은 시스템 호출을 통해 운영체제의 서비스를 받아야만 하드웨어를 이용할 수 있음.
  : System Call 의 몇몇 종류들
    - Process –> end, abort, load, execute, create, terminate, get/set attributes
    - memory –> allocate, free
    - File –> create, delete, open, close, read, write, get/set attributes
    - Device –> request, release, read, write, get/set attributes, attach/detache devices
    - Information –> get/set time, get/set system data
    - Communication –> socket, send, receive

06. 운영체제의 기본 동작 원리-3

3) 하드웨어 보호
 * 하드웨어 보호는 이중 모드의 필요성 이기도함.
 * 입출력 장치 보호
 * 메모리 보호
 * CPU 보호

 (1) 입출력 장치 보호
  * 현재 진행중인 입출력 상태를 보호함.
   : 예) 타인이 프린터 사용중에 나의 프린터 명령은 대기를 함.
        타인의 파일을 승인 없이 읽거나 변경할 수 없음.
  * 적용방법
   : 입출력 명령을 특권 명령으로 지정
   : 입출력시 운영체제에게 요청하여 처리하도록 함.
   : 운영체제의 입출력 처리가 완료되면 다시 사용자 모드로 복귀
   : 사용자 모드에서 입출력 명령이 실행되면
     Privileged Instruction Violation (특권 명령 침범)
                -> 인터럽트 발생 -> 해당 프로그램(프로세스) 강제 종료

  (2) 메모리 보호
   * 다른 사용자의 메모리 영역이나 운영체제의 메모리 영역에 접근하지 못하도록함.
    : 우연 도는 고의(해킹)로 타인의 프로그램(프로세스)에 접근 방지
   * 적용 방법
    : MMU (Memory Management Unit)를 두어 다른 메모리 영역 침범을 감시
    : MMU의 설정은 특권 명령이기 때문에 사용자가 바꿀수는 없음.
    : 다른 사용자 또는 운영체제 메모리 영역 접근 시도되면
     Segment Violation (영역 침범)
                -> 인터럽트 -> 해당 프로그램(프로세스) 강제 종료
Memory Management Unit

  (3) CPU 보호
   * 특정 사용자의 프로그램(프로세스)이 CPU를 실수 또는 고의로 독점 사용의 방지
     예) 무한 루프 처리
   * 적용방법
    : CPU 감시하는 Timer 를 두어 일정 시간 마다 Timer Interrupt 발생
    : 만약, 특정 사용쟈 프로그램(프로세스)이 CPU를 기준 보다 오래 사용하고 있다면 강제로 프로세스 교환을 발생시켜 다른 프로그램을 CPU가 처리하도록 함.


06. 운영체제의 기본 동작 원리-2


2) 이중 모드(Dual Mode)

 * 다중 사용자 프로그래밍 환경(서버 시스템) 혹은 개인 PC의 다중 프로그래밍 시스템(Multiprogramming System)에서 특정 사용자의 프로그램이 고의 또는 실수로 시스템 전체 혹은 다른 사용자에게 영향을 미치는 것을 방지하기 위해 방법.
 * 다른 사용자의 프로그램을 보호하고 시스템 전체의 안정된 운용을 위한 것임.
 * 사용자 모드(User Mode)와 특권 모드(Privileged Mode)로 구분함.
  : 하나의 프로그램(프로세스)은 사용자 모드와 특권 모드가 끊임 없이 전환되면서 실행됨.
  : 특권 명령
   - 하드웨어의 동작, 시스템의 통합 환경 변경 등 개별 유저가 실행해선 안되는 명령
   - 사용자 모드에서는 실행 불가
   - 오직 특권 모드에서 시스템에 의해서만 실행가능한 명령
   - 예) STOP, HALT, RESET

 (1) User Mode (사용자 모드)
  : 사용자 프로그램이 실행되는 상태
  : 일반적으로는 사용자 모드 상태이나 실행중 필요에 의해 순간순간 특권 모드로 강제 전환된다.
  : 사용자 모드에서 특권 명령을 실행하려 하면 인터럽트가 걸려서 해당 프로그램을 강제로 종료 시킴.

 (2) Privileged Mode(특권 모드)
  : Supervisor, System, Monitor, Kernel Mode 라고도 함.
  : 프린터, 읽기, 저장 등은 모두 특권 모드에서 실행됨.
  : 시스템 종료 및 리부팅, 시스템 환경 설정 등

 (3) 이중 모드의구현 원리
  : CPU Register에 모드를 나타내는 플래그(flag)를 둔다.
  : 운영체제 서비스가 실행될 때는 특권 모드로 전환(플래그 1)
  : 사용자 프로그램 실행될 때는 사용자 모드로 전환(플래그 0)
  : 인터럽트(하드웨어 또는 소프트웨어)가 발생하면 특권 모드로 전환(플래그 1)
  : 운영체제 서비스가 끝나면 다시 사용자 모드로전환(플래그 0)
  : User Mode: 키보드, 마우스 입력
             -> System Mode: ISR 처리
                     -> User Mode: 저장, 출력 명령
                                   -> System Mode: ISR 처리
                                              -> User Mode: ...

06. 운영체제의 기본 동작 원리-1

1) 인터럽트(Interrupt) 이해

 * 오늘 날 운영체제는 인터럽트(interrupt) 기반 시스템이다(Interrupt-Based System)
 * 인터럽트(Interrupt)는
  : 현재 진행중인 프로세스와 독립적으로 즉시 CPU가 처리해야할 사건(이벤트)
  : CPU는 인터럽트가 발생하면 즉시 운영체제 내에 있는 해당 서비스 루틴(Interrupt Service Routin; ISR)의 명령을 먼저 실행한다.
  : 인터럽트 서비스 루틴(ISR)을 처리하고 나면 다시 이전의 상태로 복귀한다.
  : 하드웨어 인터럽트(Hardware Interrupt)와 소프트웨어 인터럽트(Software Interrupt)가 있다.

Interrupt Service Routin; ISR


  (1) Hardware Interrupt (하드웨어 인터럽트)
   : 주변 장치로부터 발생된 전기적 신호에 의한 인터럽트
   : Keyboard 조작, Mouse 조작, USB 연결

  (2)Software Interrupt (소프트웨어 인터럽트; SWI)
   : 사용자의 프로그램이 실행되는 과정에서 발생한 소프트웨어적인 인터럽트
   : 프린트 명령, 파일 저장 명령 등

  (3) External Interrupt (외부 인터럽트)
   : CPU 혹은 O/S 외적인 부분에서 사용자의 필요에 의해 발생된 인터럽트
     하드웨어 인터럽트는 외부 인터럽트
   : 주로 입출력 관련 인터럽트,
     사용자가 컴퓨터를 사용할 때 발생되는 보편적인 인터럽트.

  (4) Internal Interrupt (내부 인터럽트)
   : 안정된 시스템 동작을 위해 시스템 내부적으로 사전에 정의해 놓은 조건에 의해 발생되는 인터럽트
   : 클럭 인터럽트(Clock Interrupt)
    - CPU 모니터링 -> CPU가 특정 프로세스에 집중되지 않도록 관리.
    - 프로세스 교환 -> 일정시간이 지나면 프로세스 교환(문맥 교환) 발생
   : Trap(트랩) 또는 Exception(예외)
    - 트랩 -> Overflow, dividing by zero, 특권 명령 시도, 정전, 잘 못된 메모리 주소 참조
    - 예외 -> 의도된 범위를 벗어난 동작의 발생. 예외 처리를 통해 방지.

2017년 3월 12일 일요일

05. 운영체제의 역사/종류-B3

3) 실시간 운영체제(RTOS; Real-Time OS)

* 실시간 시스템(Real-Time Computing System)의 필요
  : 프로세서의 처리 능력이 단순히 빨라서 좋은 것이 아니고 반드시 특정시간(Deadline)이내에 완료해만 하는 시스템.
  : 주로 군사, 항공, 우주 산업 분야에서 사용. 최근 자율주행자동차.

Factory Automation
< 공장 자동화(Factory Automation) > 

< 미사일 요격 시스템 >

 : 실시간 시스템을 운용하기 위한 OS
 : 1순위 작업을 OS가 모니터링 하다가 필요에 따라 다른 작업의 리소스 할당을 줄이거나 없애고 1순위 작업에 투입.

참고) 실시간 운영체제는 본 블로그에서 자세히 다루지 않음.

[Side Knowledge]
* 컴퓨터 시스템의 분류
  --운영체제도 시스템 발달에 따라 순차적으로 적용되어 짐.

  : Server-Client System 
Server-Client System


  : Handheld System - 노트북, 전자수첩, 스마트폰, 타블릿

  : Embedded System
 Embedded System


05. 운영체제의 역사/종류-B2

2) 분산 운영체제(Distributed OS)
 * 더 좋은 컴퓨터를 운용하기 위한 또 다른 방안?
  : Cost (비용) - 상대적으로 적은 비용
  : Performance (성능) - 더 높은(고) 성능의 발휘
  : Reliability (신뢰성) - 최대한 작업이 중단되지 않도록

 * Distributed Computing System (분산 처리 시스템) 등장
  : 독립적인 다수개의 시스템이 네트웍으로 상호 연결됨.
  : CPU(Processor), Main Memory가 다 수개가 됨.
  : Loosely-coupled system (약결합 시스템)
    -> CPU, Memory가 모두 직접 연결되지 않고 네트웍으로 연결.
  : 대표적인 예 - Alphago ( 알파고 )

Distributed Computing System

 * Distributed OS (분산 운영체제)
  : 분산 시스템을 운영하기위한 운영체제
  : 처리 능력의 향상. 동시에 여러 작업을 수행할 수 있음.
  : 신뢰성 확보. 특정 장치가 중지 되어도 다른 장치가 대체 수행.
  : 저비용. 고성능 컴퓨터 1대 보다 저성능 다수개의 컴퓨터로 구현이 저렴

참고) 분산 OS는 본 블로그에서 자세히 다루지 않음.

05. 운영체제의 역사/종류-B1

1) 다중 프로세서 운영체제(Multiprocessor OS)
 * 더 좋은 컴퓨터를 운용하기 위한 방안?
  : Cost (비용) - 상대적으로 적은 비용
  : Performance (성능) - 더 높은(고) 성능의 발휘
  : Reliability (신뢰성) - 최대한 작업이 중단되지 않도록

 * Multiprocessor System (다중 프로세서 시스템) 등장
  : 다수의 processor (CPU)가 1개의 Main Memory (메인 메모리)를 공유하는 시스템
  : 연산을 담당하는 장치인 Processor가 복수개 이므로 더 빨리 더 많은 작업 처리 가능.
  : Parallel Computing System (병렬 처리 시스템) 
  : Tightly-coupled System (강결함 시스템)

Tightly-coupled System
<다중 프로세서 시스템: 원본출처 >

 * Multiprocessor OS (다중 프로세서 운영체제)
  : 처리 능력의 향상. 동시에 여러 작업을 수행할 수 있음.
  : 신뢰성 확보. 특정 프로세서가 중지 되어도 다른 프로세서가 대체 수행.
  : 저비용. 고성능 CPU 1개 보다 저성능 CPU 다수개가 더 저렴함
  : CPU Management
   -> 각 프로세서가 어떤 일을 담당할 것인가?
   -> 필요한 경우 프로세서간 작업의 공유는 어떻게 할 것인가?
      즉, 작업의 동기화는 어떻게 할 것인가?
  : Memory Management
   -> 각 프로세서간 메모리 점유 관리

참고) 다중 프로세서 OS는 본 블로그에서 자세히 다루지 않음.

[Side Knowledge]
* Multicore System
  : 1개의 CPU 칩셋에 여러개의 core를 집적하여 만듬.

  : 듀얼 코어(dual-core) 프로세서 - 두 개의 코어
  : 트리플 코어(triple-core) 프로세서 - 세 개의 코어
  : 쿼드 코어(quad-core) 프로세서 - 네 개의 코어
  : 헥사 코어(hexa-core) 프로세서 - 여섯 개의 코어
  : 옥타 코어(octa-core) 프로세서 - 여덟 개의 코어
  : 데카코어(Deca-core) 프로세서 - 열 개의 코어
  : 도데카 코어(Dodeca-core) 프로세서 - 열두개의 코어

2017년 3월 11일 토요일

04. 운영체제의 역사/종류-A3

3) 시공유 운영체제(TSS; Time Sharing OS)
 * 기술의 발전에 따른 새로운 시스템의 출현
   : Display 장치인 모니터, 입력장치인 키보드의 출현
   : 대화명 컴퓨터(Interactive System) 태동

 * Time Sharing System(시공유 시스템)의 등장
   : 다수의 사용자가 각자의 터미널(Terminal)을 이용해 중앙 컴퓨터에 접속
   : 하나의 중앙 컴퓨터에 다수의 사용자가 연결되어 동시에 컴퓨터를 이용
   : 하나의 메모리에 여러 사용자의 프로그램을 로드하여 실행

 * Multiprogramming System과의 차이점
   : Multiprogramming
    -> CPU 1개 / Memory 1개 / 입력 장치 1개 / 사용자 1명(Operator) / 멀티 프로그램
    프로그램이 I/O 처리를 할 때 CPU는 다른 프로그램을 처리한다.
   : Time Sharing    
    -> CPU 1개 / Memory 1개 / 터미널 장치 n개 / 사용자 n명 / 멀티 프로그램
    프로그램이 I/O처리를 할 때 뿐 아니라 일정 시간이 지나면 CPU는 강제로 다음 프로그램을 처리하기 시작한다.

Time Sharing System Architecture
< Multiprogramming System Architecture >

 * Time Sharing OS (시공유 운영체제)
  : 만약, Multiprogramming OS를 사용한다면
    User1이 작업을 하고있다면 다른 사용자들의 작업은 진행되지 않음.
    왜냐하면 CPU가 하나 밖에 없기 때문임.
  : 따라서 CPU가 각 사용자(User)의 작업을 돌아가면서 처리하도록 함.

< CPU의 작업 할당: 원본출처 >

  : 1인당 대략 1/100ms ~ 1/1,000ms씩 시간을 할당해줌.
   만약 6명이 사용한다면 초당 16번 ~ 160번 할당을 받음.
  : CPU가 매우 빠르게 작업자들의 작업을 스위칭(Switching)하기 때문에 사용자들은
   이를 의식하지 못하고 자신이 계속해서 컴퓨터를 점유하고 사용하는 것으로 느끼게 됨
   -> 시공유 시스템(Time Sharing System), 시공유 운영체제(Time Syaring OS)

 * 시공유 운영체제로 부터
  : CPU Scheduling
  : Memory Management
   -> 누구의 작업을 먼저 처리해 줄 것인가?
   -> 접속만 하고 작업을 하지 않는 사용자가 있다면?
   -> 프로세스 동기화. 각 사용자의 작업이 끊기지 않고 일관되도록 유지해야 함.
   -> 가상 메모리. 많은 사용자 접속시 메모리 부족. 해결 위해 가상메모리 기술출현
  : 연결되어 있는 사용자간 메시지 전공 가능 -> 오늘날의 메신저
  : 다른 사용자의 작업 메모리 혹은 저장 파일에 접근할 수 없도록 하는 보호/보안기술

04. 운영체제의 역사/종류-A2

2) 다중 프로그래밍 운영체제 (Multiprogramming OS)
 * 기술적 발전
  : 하드 디스크의 출현
  : 메모리 크기의 확대
  : 빨라진 연산 속도

 * Batch processing System의 문제
  : CPU는 매우 빠른데 데이타를 읽거나 출력하는 시간이 너무 오래걸림.
   즉, CPU가 I/O를 만나면 긴시간 아이들(Idle) 상태로 쉬게됨.
  : 고가의 컴퓨터 장비 더 많은 작업을 할 수는 없을까?
   즉, CPU가 쉬는 상태(Idle) 없이 계속 작업 할 수 있는 방안은?

 * Multiprogramming System(다중 프로그래밍 시스템) 출현

Multiprogramming System
<A,B,C,D 4개 프로그램의 실행: 원본출처 >

  : 하나의 메모리에 여러 개의 프로그램을 로드함.
  : CPU가 하나의 프로그램을 실행하다가 I/O 상태가 되면 다음 프로그램을 실행.
  : I/O 상태는 매우 긴 시간이기 때문에 다수의 프로그램을 CPU가 쉬지 않고 처리가능.

 * Multiprogramming OS (다중 프로그래밍 운영체제)
  : 다중 프로그래밍 시스템이 가능하기 위해서
   - CPU Scheduling ( CPU 스케쥴링 ) 기술의 출현
     어떤 순서로 프로그램을 처리할 것인가?
      A -> B -> C -> D  /  C -> A -> B -> D  /  A -> B -> C -> D

   - Memory Management ( 메모리 관리 ) 기술의 출현
     메모리의 어떤 공간에 프로그램을 로드할 것인가?
     다른 프로그램이 있는 메모리 영역을 침범 하지 않을 수있는 방안은?
    

04. 운영체제의 역사/종류-A1

1) 일괄 처리 운영체제 (Batch Processing OS)
 * 운영체제가 없던 시절
ENIAC

  : 작업을 위한 모든 내용을 천공카드(Punched Card)로 제작(프로그래밍)하여 카드리더로 읽게함.
  : 컴파일 프로그램도 카드리더로 읽어서 메모리에 적재된 작업 프로그램을 컴파일함.
  : 컴파일 후 처리기에 의해 작업이 처리되고 그 결과는 라인프린터로 출력됨.
  : 프로그램의 연산을 제외하고 모든 작업을 사람이 수작업으로 관리함.
   전문 컴퓨터 운영자(operator)가 있었음.



 * 최초의 운영제체
  : Batch Processing System(일괄 처리 시스템)의 등장


Batch Processing System(
<초기 Batch Processing System: 원본출처>



Batch Processing System(


  : 수작업으로 일일이 제어하던 절차를 일련의 일괄처리 프로그램으로 제작하여 메모리에 상주시켜서 자동으로 처리하게 함.
  : 메모리에 상주해 있는 작은 프로그램을 Resident Monitor 라고도 함.
  : 이러한 시스템을 "Batch Processing System"이라고 하며 최초의 운영체제 개념이 됨.
  : Operator의 수고를 줄여줌.

* 참고링크
  : 일괄 처리 ( Click )
  : Batch Processing System ( Click ) 

2017년 3월 8일 수요일

03. 운영체제란?-3

3) 운영체제의 위치
  * 운영체제 => Kernel + Shell
   : 커널(Kernel) - 운영체제의 핵심(core) 영역, 운영체제 서비스 영역
   : 쉡(Shell) - Kernel 과 사용자간의 연결 인터페이스.
              사용자의 명령을 입력받고 결과를 전달함.
              CLI (Command-Line Interface) or GUI (Graphic User Interface)

Operating System

  * 일반적인 우리가 운영체제를 다룰줄 안다는 것은?
   : Shell을 다룰줄 안다는 것을 의미함.
   : 본 글에서 다루는 것은 "Shell"이 아니라 "Kernel"임.


  * 아래의 그림에서 운영체제는?
Operating System
   : 자원 관리자(Resource Manager)
   : 자원 할당자(Resource Allocator)
   : 사람으로 비유하면 나의 신체를 컨트롤하는(관리하는) 기능으로써의 "마음(Mind)"
    즉, 일은 손이 하지만 손을 관리하는 것은 뇌의 어떤 작용인 마음이다.
       팔이 아프면 팔을 쉬게하고, 이동할 때 걷도록 한다.
   : 프린트를 운영체제가 하는 것은 아니지만 프린터가 프린트를 하도록 지시, 관리하다.
     프로세서와 메모리가 작업을 잘하도록 관리하며, 디스크와 파일을 관리하다.
     사용자가 마우스를 움직이지만 실제로 화면에서 움직이고 마우스의 명령을 실행하도록 하는 것은 운영체제이다.

   : 운영체제는 "정부(Government)"에 비유하면 이해하기 쉽다.
    - 대한민국을 운영하기 위해서는 도로 및 토지관리, 교육, 보건복지, 국방, 법무, 외교 등 많은 일들이 있다. 하지만 도로를 놓거나, 건설을 하고, 교육을 하는 것은 정부가 하지는 않는다. 정부는 단지 관리를 할 다름이다. 즉, 실제 일은 건설회사, 교육기관, 군부대 등에서 하는 것이고 각각의 관리는 국토건설부, 교육부, 국방부 등의부처에서 관리를 하게 된다. 이런 정부의 관리부처가 하는 역할이 곧 운영체제의 역할이라고 생각하면 된다.

03. 운영체제란?-2


2) 부팅(Booting), 로딩(Loading)
  * 메모리는 ROM과 RAM으로 구성되어져 있다.
   : RAM - Random Access Memory -> 전원이 꺼지면 소멸
   : ROM - Read Only Memory -> 전원이 꺼져도 유지, 단 변경불가

  * 컴퓨터의 전원 스위치가 켜지면 어떤 일이 벌어지나?
   : 메인 메모리인 RAM은 휘발성 이기 때문에 전원이 켜질 때 아무것도 들어 있지 않다.
     (정확히는 전혀 쓸모없는 쓰레기값만 들어 있다) 
   : 모든 프로그램은 메인 메모리에 적재 되어야 실행이 가능하기 때문에 운영체제 역시 디스크에서 메인 메모리로 옮겨져야 한다. 
   : ROM에는 처음 컴퓨터를 켰을 때 디스크에 있는 운영체제 파일들을 찾아 메인 메모리(RAM)로 올리는 명령들이 들어 있다.
   : 이것을 부트(Boot)라고 하며 그 과정을 부팅(Booting)이라고 한다. 이 작업을 수행하는 것을 부트 로더(Boot Loader)라고 한다.
   : 부팅단계는 아래와 같다.
     1단계 - POST(Power-On Self Test) -하드웨어 장치들에 대한 체크
     2단계 - 메인 메모리(RAM)에 운영체제 적재
     3단계 - 운영체제 환경 설정(세팅)
     4단계 - 운영체제가 컴퓨터를 제어 시작, User Interface( Shell or GUI ) 로드

Booting
 
  * 운영체제는 언제 까지 동작하나?
   : 전원이 켜져 있는 동안에는 메인 메모리에 상주한다.
   : 전원이 꺼지면 그 기능이 소멸된다(사라진다.) 

 * 그럼 로딩(Loading)은 무엇이고 누가 하나?
   : 응용 프로그램과 데이타들이 메인 메모리에 적재되는 것을 로드(Load)라고 하며 그 과정을 로딩(Loading)이라고 한다. 
   : 파일(프로그램, 데이타) 로드(Load)는 운영체제가 한다.

03. 운영체제란?-1

1) 운영체제, Operating System, OS
 OS Logos, Operating System

  * 운영체제를 설명하기전 먼저 운영체제가 없는 컴퓨터를 상상해 본다면???
   : 사용자는 컴퓨터를 이용하기 위한 어떠한 조작도 할 수 없다.
   : 마치 '뇌사'한 상태와 같다.
   : 생명은 있으나 아무것도 할 수 없는 상태이다.

  * 컴퓨터의 핵심 => Processor (CPU) + Memory (Main Memory, RAM)
   : 모든 프로그램은 실행되기 위해서 "메인 메모리"에 적재되어야만 한다.
   : 프로세서는 메모리에 있는 프로그램(명령들)을 가져다가 처리하는 것이다.

 *  사용자가 아래한글(HWP)을 실행하면 어떤 일이 벌어지나?
   : 하드디스크에 있는 HWP 프로그램 파일들이 메모리에 로드된다.
   : 프로세서는 메모리의 HWP 프로그램(명령들)에  따라 처리한다.
   : 하드디스크의 프로그램을 메모리에 로드는 누가 하나? -> 운영체제

 * 현대 컴퓨터는 동시에 여러 개의 프로그램을 실행할 수 있다.
   : MS-Word를 실행하다가 Chrome도 실행하고 동영상 플레이어도 실행한다.
     -> 멀티 프로그래밍 시스템(Multi-Programming System)
   : 무엇이 이것을 가능하게 하는가? -> 운영체제

  * 컴퓨터에는 다양한 하드웨어가 연결되어져 있다.
   : 키보드, 마우스로부터 입력을 받고, 프린터로 인쇄를 하고, 스캐너로 스캔을 한다.
    모니터에 디스플레이되고 파일을 읽고 파일을 저장한다.
   : 무엇이 이것을 가능하게 하는가? -> 운영체제

  * 운영체제는 무엇을 위해 존재하는가?
   : 사용자 편의성 제공(User Convenience)
     -> 사용자를 위한 사용환경의 제공(User Interface)
   : 컴퓨터의 성능 향상(More Reliable or Better Performance)
     -> 처리 능력 향상, 신뢰도 향상, 응답 시간 단축 등
   : 컴퓨터의 하드웨어를 관리(Hardware Management)
     -> 키보드, 마우스, 프린터, 스캐너, 모니터, CPU, 메모리, LAN Card, USB 등

2017년 3월 6일 월요일

02. 데이터 표현과 프로그램-2

2) 프로그램
 (1) 프로그램의 정의 및 특징
   * 프로그램은 컴퓨터가 연속적으로 해야하는 작업을 지시하는 명령들의 집합니다.

   * 이 명령들은 모두 기계어(machine language / binary digit / 0, 1)로 이루어져 있다.
     : 사람이 읽기 어려운 기계어(machine code) / 목적 코드(object code, target code)

   * 따라서 사람이 인식할 수 있는 고급언어를 이용하여 코드를 작성한 후 기계어로 변환한다.

   * 고급언어 즉, 소스코드(source code)를 기계어로 변환하는 과정을 컴파일(compile)이라고 하며 이를 수행하는 것을 컴파일러(compiler)라고 한다.

     참고) 어셈블리어(assembly language)를 기계어로 변환하는 과정을 어셈블리라고 하며 이를 수행하는 것을 어셈블러(assembler)라고 한다. 어셈블리어는 기계어에 가까운 언어로 기계어의 명령문과 1:1 대응 관계를 갖는다.

   * 컴파일러가 없는 언어의 경우 사용자가 실행하는 시점에 인터프리터(Interpreter)에 의해 즉시 기계어로 변환된다.
  (주로 HTML, asp, php 같은 Web Languages, Lua Script 등)


 (2) 프로그램의 실행
   * 기본적으로 대부분의 모든 프로그램은 보조기억장치(ex, HDD)에 저장되어 있다.
   * 모든 프로그램은 실행되기 위해서는 메인 메모리에 적재되어야 한다.
   * 메인 메모리에 놓여진 명령들을 프로세서가 처리하고 그 결과를 반환하는 반복적인 과정이 바로 프로그램이 실행되는 현상인 것이다.


 (3) 프로그래밍
   * 규정된 규칙에 따라 컴퓨터에 부여하는 명령(즉, 프로그램)을 만드는 작업.
   * 프로그래밍 규칙들
     : 변수와 상수, 함수, 연산자, 조건문, 반복문, 배열
     : 객체지향 프로그래밍(OOP, Object Oriented Programming)

      참고) 변수의 데이타 타입(java 기본형)
java data type

   * 메모리를 차지하는 영역의 분류
     : 컴파일시(정적할당, Static)     - Code, Data, Stack
     : 런타임시(동적할당, Dynamic) - Heap

[Side Knowledge]
 * ASCII [ Click ]            * Unicode [ Click ]

 * 중위식(infix notation)    
   :  2 + 3        2 + 3 + 4      (-10 + 3 * 4)        A + B + C  / D        A * (B + C) / D
 * 전위식(prefix notation)
   :  + 2 3        + 2 3 5        (- 10 (* 3 4))        + * A B / C D          / * A + B C D
 * 후위식(postfix notation)
   : 2 3 +        2 3 4 +         (10 (3 4 *) -)        A B * C D / +         A B C + * D /

2017년 3월 5일 일요일

02. 데이터 표현과 프로그램-1

1) 단위와 진수
 (1) 표현 단위
    * 1 bit : 0 또는 1 => 2의 1승 = 2개
    * 1 nibble : 4 bit => 2의 4승 = 16개
    * 1 byte : 8 bit => 2의 8승 = 256개

    * 1 word : 2 byte (16 bit 컴퓨터) / 4 byte (32 bit 컴퓨터) / 8 byte (64 bit 컴퓨터)
      참고) 워드(word)는 하나의 기계어 명령어나 연산을 통해 저장된 장치로부터 레지스터에 옮겨 놓을 수 있는 데이터 단위이다. 메모리에서 레지스터로 데이터를 옮기거나, ALU을 통해 데이터를 조작하거나 할 때, 하나의 명령어로 실행될 수 있는 데이터 처리 단위이다.

 (2) 저장 용량의 단위
   * 1 Byte
   * 1 KB (Kilo Byte)   = 1,024 byte (천)
   * 1 MB (Mega Byte) = 1,048,576 byte (백만)
   * 1 GB (Giga Byte)  = 1,073,741,824 byte (십억)
   * 1 TB (Tera Byte)  = 1,099,511,627,776 byte (조)
   * 1 PB (Peta Byte)  = 1,125,899,906,842,624 byte (천조)

  (3) 10 진수(Decimal), 2 진수(Binary), 8 진수(Octal), 16 진수(Hexadecimal)

Decimal, Binary, Octal, Hexadecimal

 (4) 진수의 변환
    * 10진수                        => 2진수, 8진수, 16진수
    *  2진수, 8진수, 16진수 => 10진수
    *  2진수 =>  8진수 : 2진수 3자리 묶음.
    *  8진수 =>  2진수 : 1자리가 2진수 3자리
    *  2진수 => 16진수 : 2진수 4자리 묶음.
    * 16진수 =>  2진수 : 1자리가 2진수 4자리
    *  8진수 => 16진수 : 8진수 -> 2진수 -> 16진수
    * 16진수 =>  8진수 : 16진수 -> 10진수 -> 2진수 -> 8진수

 (5) 음수의 이진수 표현
    *  2  => 0000 0010
    * -2  => 1111 1110  (2의 보수)
    * 컴퓨터는 빼기도 보수를 이용해 더하기로 처리한다.

[Side Knowledge]
* 그리스 숫자 읽기
  일      / 이 / 삼 / 사     / 오     / 육     / 칠       / 팔     / 구     / 십
  Mono / Di / Tri / Tetra / Penta / Hexa / Hepta / Octa / Nona / Deca

01. 컴퓨터 구조-5

5) 디스크 (DISK)

Hard Disk
< HDD >


Hard Disk
< Sector / Track / Head >


< Sector / Track / Cluster 또는 block)  / Cylinder > 

01. 컴퓨터 구조-4

3) 메모리 (Memory)
 (1) 메모리의 종류

memory
< 저장 장치들 >


memory

< 메모리 계층 구조 >

* Register (레지스터)
  : 메인 메모리(주기억장치)에서 읽어 온 명령어와 자료 등을 저장하는 임시 저장장치.
  : 연산장치에서 처리된 결과를 저장하는 임시 저장장치
  : 다음에 실행 할 명령어의 주소 값을 저장하는 저장장치.

* Cache (캐시 메모리)
   : CPU의 속도에 의해 컴퓨터 속도가 결정. CPU와 메인 메모리의 속도차를 보완.
   : 즉, 처리 속도가 빠른 프로세서와 상대적으로 느린 메인 메모리 사이에서 데이터나 정보를 저장하는 고속 버퍼(L1 Cache, L2 Cache)
  : 참고) Disk Cache (디스크 캐시)는 메인 메모리와 HDD 사이의 속도차를 보완.

* Main Memory (주기억장치)
 : 컴퓨터가 작동하는 동안 CPU(중앙처리장치)가 해야 할 작업 내용인 프로그램 명령어와 프로그램에서 이용할 데이터를 저장하고 있는 기억장치.

CPU & main memory
  : 논리 주소(Logical Address)
    컴파일러에 의해 기계어로 변환된 변수와 명령어에 할당되는 주소.

  : 물리 주소(Physical Address)
    실제 메인메모리에 할당된 주소.


 (2) RAM, ROM, Secondary Memory
* RAM (Random Access Memory)
 : 전원이 꺼지면 저장된 내용이 모두 사라지는 휘발성 기억장치.

* ROM (Read Only Memory)
 : 전원이 꺼져도 그 내용이 유지됨.
 : 한 번 저장된 자료는 더 이상 쓰기를 할 수 없이 읽기만 가능한 기억장치.

* 보조 기억장치(Secondary memory)
 : HDD, SSD


  (3) Virtual Memory (가상 메모리)
      : 보조기억장치를 Main Memory(주기억장치)처럼 사용하는 메모리 관리 기술.
      : Main Memory 용량의 한계를 초월하여 메모리를 관리함.

2017년 3월 4일 토요일

01. 컴퓨터 구조-3

3) 레지스터(Register)와 버스(Bus)

 (1) 레지스터(Register)
  : 메인 메모리(주기억장치)에서 읽어 온 명령어와 자료 등을 저장하는 임시 저장장치.
  : 연산장치에서 처리된 결과를 저장하는 임시 저장장치
  : 다음에 실행 할 명령어의 주소 값을 저장하는 저장장치.
  : 크기 - 32 bit, 64 bit, 128 bit, 256 bit
  : 가장 빠르고 가장 비싼 메모리


Registers
< 레지스터의 종류 >

* IR (Instruction Register / 명령어 레지스터)
  : 현재 수행중인 명령어를 저장하는 레지스터.
* MAR (Memory Address Register / 메모리 주소 레지스터)
  : 현재 접근할 메모리의 주소를 기억하는 레지스터.
* PSR (Program Status Register / 프로그램 상태 레지스터)
  : 프로그램의 매순간 수행 상태와 프로세서 상태를 저장하는 레지스터.
* MBR (Memory Buffer Register / 메모리 버퍼 레지스터)
  : 데이터를 메모리와 주변 장치 사이에서 송수신하는 것을 용이하게 함.
  : 지정된 주소에 데이터를 써넣거나 읽어내는 데이터를 저장하는 버퍼 레지스터.
* PC (Program Counter / 프로그램 카운터)
  : 프로그램 수행을 제어하는 명령어 실행 순서를 보관.
  : 즉, 다음에 실행할 명령어의 메모리 주소를 저장하는 레지스터.
* DR (Data Register / 데이터 레지스터)
  : 연산에 필요한 피연산자를 저장하는 레지스터.
* AC (Accumulator / 누산기)
  : 연산장치의 입출력 데이터를 임시적으로 기억하는 레지스터.
* MQR (Multiplier Quotient Register / 곱수 몫 레지스터)
  : 곱셈에서 곱수를, 나눗셈에서 몫을 저장.
  : 컴퓨터의 산술 논리 부분의 레지스터.


 (2) 버스(Bus)
  < Internal Bus(내부 버스) >
   : 프로세서 내부에서 레지스터, 연상장치를 연결, 외부버스(External bus)와 연결

  < External Bus(외부 버스) >
   : 프로세서와 메모리, 프로세서와 입출력장치, 입출력장치와 입출력장치를 연결.

External Bus


System bus
* Control Bus (제어 버스)
  : 프로세서가 저장장치와 입출력장치에 데이터를 전송할 때 사용.
  : 현재 수행중인 작업 종류나 상태를 다른 장치에 알릴 때 이용하는 단방향 버스.
* Address Bus (주소 버스)
  : 프로세서가 메모리에 주조정보를 전달할 때 사용하는 단방향 버스.
* Data Bus (데이터 버스 )
  : 프로세서가 메모리나 입출력 장치로 데이터를 전달 하거나 또는 데이터를 전달 받을 때 사용하는 양방향 버스.

01. 컴퓨터 구조-2

2) 프로세서(Processor)
   : CPU(Central Processing Unit / 중앙처리장치)
   : Microprocessor(마이크로프로세서)

main memory history




Intel Processor
< Intel Processor > 


Processor Architecture
< Processor Architecture>


* ALU (Arithmetic and Logic Unit / 산술 및 논리 연산 장치)
  : 더하기, 빼기, 곱하기, 나누기 등의 산술연산과 Not, And, Or, Xor 등의 논리 연산을 수행하는 장치.

* Register(레지스터)
  : 메인 메모리(주기억장치)에서 읽어 온 명령어와 자료 등을 저장하는 임시 저장장치.
  : 연산장치에서 처리된 결과를 저장하는 임시 저장장치
  : 다음에 실행 할 명령어의 주소 값을 저장하는 저장장치.

* Control Unit(제어 장치)
  :  산술 및 논리 연산에 필요한 작업 신호를 연속적으로 보냄으로써 연산장치와 레지스터가 명령을 수행하게 하는 장치.
  :명령어의 실행에 필요한 연산 순서와 연산 종류 등을 종합적으로 제어.
   즉, 실행할 명령어를 해석하여 해석된 멸령어에 해당되는 제어 신호를 발생 처리.

* Internal Bus(내부 버스)
  : 프로세서 내부에서 레지스터와 연산장치(ALU) 연결. 외부버스(External bus) 연결.

01. 컴퓨터 구조-1

본 블로그의 주요 참고 문헌 및 자료
* 경성대학교 양희재 교수 유튜브 강의
* 운영체제: 그림으로 배우는 원리와 구조(구현희, 한빛 아카데미)
* 운영체제 9판(Silberschatz 외 지음, 조유근 외 번역, 교보문고)

1) 컴퓨터 구조(Computer Architecture)


<컴퓨터 내부 >

Desktop Computer
< 데스크탑 >

Computer Architecture
< 컴퓨터의 구조 단순화 모형1 >


Computer Architecture
< 컴퓨터의 구조 단순화 모형2>


[Side Knowledge] 
* ms(millisecond):  1/1,000초
* us(microsecond): 1/1,000,000초
* ns(nanosecond):  1/1,000,000,000초
* ps(picosecond):   1/1,000,000,000,000초