웹 프로그래밍 스쿨 17주 차 포스팅입니다!😃

 

 

 

이번 주는 장고수업이 끝나서 다른 수업 없이 두 번째 해커톤 준비 및 진행과

컴공 심화과정 수업을 위해 다시 돌아오신 양강사님과의 상담 및 선배와의 티타임이 진행되었습니다.

 

 

이번에 티타임에 참가 해주신 선배님은 회사 업무를 진행하면서 막히는 부분을 고민하고, 트렌드 파악을 위해

대외활동을 하고, 헬스를 하고,  코드를 리팩토링 하면서 정말 바쁘게 지내시는 분이었는데요!

 

 

 

https://pixabay.com/ko/photos/

 

 

 

티타임이 끝나고 나니, 같은 비전공자로서 이대로 현업에 가게 되면 적어도 몇 년은 이런 바쁜 일상을 보내게 될 텐데

언젠가는 중요성을 깨닫게 된다는 이 두꺼운 기본 서적들은 언제 공부해야 할지,

실무에서 헤매지 않기 위해 코드 짜는 연습을 먼저 해야 할지에 대한 고민이 생겼습니다.😂

 

이런 고민을 선생님과 상담하면서 어떤 방향으로 공부해야 하는지를 물어봤었는데 

둘 다 장단점이 있지만 기본에 대한 공부를 해두면 나중에 성장 속도가 더 빨라질 수 있다는 이야기를 해주셔서

시간이 날 때 기본 공부를 조금 더 해두자는 생각에 컴퓨터 시스템 구조에 대해 공부해봤습니다.

 

 

 

 

1. Storage Structure

 

 

  1) 모든 형태의 메모리는 바이트의 배열을 제공합니다.

 

  2) 각각의 바이트는 자기 자신의 주소를 갖습니다.

 

  3) 상호작용은 지정된 메모리 주소로의 load 또는 store명령의 반복을 통해 이루어집니다.

 

  • load 명령은 메인 메모리로부터 byte 또는 word를 cpu내부의 레지스터로 이동시키고

  • store 명령은 register 안의 내용을 메인메모리로 이동시킵니다.

 

   4) 실행 주기 (von Neumann architecture)

 

  • 메인 메모리로부터 instruction을 가져와서 instruction register에 저장시킵니다.
  • instruction이 decode 되고 피연산자를 메모리로부터 가져와서 내부 레지스터에 저장시킵니다.
  • 피연산자가 실행된 후에 실행결과를 다시 메모리에 저장합니다.

 

 

  5) Memory Hierarchy (메모리 계층 구조)

 

https://github.com/ythwork/

 

  • 각 계층은 속도와 가격, 메모리의 크기, 휘발성 여부 면에서 차이점을 가지고 있습니다.
  • 상층일수록 가격이 비쌉니다.
  • 상층에서 하층으로 갈수록 메모리 크기가 커집니다.
  • 메모리크기가 커질수록 디코딩 시간이 오래 걸리므로 하층으로 내려갈수록 cpu의 접근 속도가 
    느려집니다.
  • 레지스터와 캐시는 cpu안쪽에 존재하므로 다른 계층보다 더 빠르게 접근 가능합니다.
  • 캐시에는 cpu가 자주 접근하는 자료들을 저장합니다.
  • cpu는 하드디스크에 직접 접근할 수 없고 하드디스크에 있는 데이터를 메인 메모리에 올리고 난 후에
    메인 메모리에서 데이터에 접근할 수 있습니다.
  • 하드디스크는 전원이 꺼져도 내용물을 잃지 않는 비휘발성 메모리입니다.

 

 

 

 

 

2. I/O Structure

 

 

https://commons.wikimedia.org/wiki/File:Computer1.png

 

 

보통의 컴퓨터는 CPU들과 common bus로 연결된 device controllers로

각각의 컨트롤러는 지정된 타입의 주변장치들, 일부 로컬 버퍼 저장소와 특수 목적 레지스터들을 유지 관리합니다.

컨트롤러는 제어하는 주변장치와 로컬 버퍼 저장소간 데이터의 이동을 담당합니다.

 

 

 

1)  interrupt-driven I/O 

 

 

(1) I/O 작업을 시작하기 위해 장치 드라이버는 컨트롤러 안에 있는 적절한 레지스터를 로드하는데

   이때 컨트롤러는 어떤 행동을 취할지에 대한 결정을 하기 위해 레지스터 안의 내용을 확인합니다.

   (운영 체제에는 각 컨트롤러에 대한 장치 드라이버가 있습니다.)

 

(2) 컨트롤러는 device로부터 로컬 버퍼로 전송을 시작합니다

 

(3) 데이터 전송이 완료되면 컨트롤러는 인터럽트를 통해 드라이버에게 작업이 완료되었음을 알려줍니다.

 

(4) 장치 드라이버는 운영 체제에 제어권을 반환합니다.

 

 

 

2) DMA(Direct Memory Access)

 

 

 interrupt-driven I/O 방식은 소량의 데이터를 전송하기에 적절하나, 대량의 데이터를 전송할 때 사용한다면

 데이터 전송이 끝날 때까지 지속적으로 cpu에 interrupt가 일어나서 다량의 오버헤드를 발생시킬 수 있습니다.

 

 이 문제를 해결하기 위해 i/o device에 대한 버퍼와 포인터, 카운터들을 설정하고, 

 컨트롤러가 직접 버퍼에서 메모리로 전체의 데이터 블록을 전송하는 방법으로 오버헤드를 줄일 수 있습니다.

 (byte 당 한 번의 인터럽트 -> block당 한번의 인터럽트)

 

 

Operating-System-Concepts---9th, Abraham-Silberschatz을 보면서 번역 및 정리해봤는데 틀린 내용이 있을 수 있습니다.

 

참고한 사이트 : https://ko.wikipedia.org/wiki/메모리_계층_구조

 

 

 

 

웹 프로그래밍 스쿨에 대해 더 알아보기 ⭐

 

BELATED ARTICLES

more