[컴퓨터 공학] 기초

Hyun Jin·2023년 3월 29일
0

중요 내용

  • 프로그램과 프로세스의 차이
  • 메모리 공간 공유 여부
  • 멀티 프로세스
  • 한개의 프로세스 안의 멀티 스레드
  • 스레드 안의 공통영역은 코드, 데이터, 힙. 스레드 안의 스택 영역은 메모리 공유를 하지 않음.

1. 컴퓨터 구조

컴퓨터의 기본 구성요소 :

  1. 입력장치, 출력장치(I/O Devices)
  2. 중앙처리장치(CPU, Central Process Unit)
    • 컴퓨터의 뇌와 같은 역할.
    • 코어의 개수가 많을수록 성능이 좋음.
    • CPU 의 구성
    1. 산술/논리 연산 장치(ALU)
    2. 제어 장치
      제어 장치는 프로그램에 따라 명령과 제어 신호를 생성하여 각종 장치의 동작을 제어하는 것
    3. 레지스터

2. Memory ✨️


저장장치(Memory)

  • 레지스터>캐시>메인 메모리> 보조 기억 장치 순으로 빠르고 좋음. 아래쪽은 속도가 느림.
  • 레지스터 : 프로세서 바로 옆에 붙어 있음. 뇌 바로 옆에 붙어있음. 겁나 빠르고 엄청 비쌈. 프로세스가 사용할 메모리는 적음. CPU(프로세서) 가 쓰라고 만들어놓은 공간임. 사람이 관장하라고 할당해놓은 메모리가 아님. 엄청 적고 되게 빠름. 갈아끼우기는 힘듬. CPU 와 쌍으로 보면 됨.

캐시 메모리(Cache Memory

  • 캐시 : 캐시와 메인 메모리 둘다 램인데 그중에서 더 비싸고 빠른 애를 캐시 용으로 쓰자고 함. 램의 종류 중 SRAM.
  • 일반적으로 말하는 RAM 은 메인 메모리를 가리킴.(DRAM)
  • 캐시는 프로세서 내부에 있기도 하고 따로 가는 경우도 있음.(컴퓨터마다 다름) 캐시는 빨라야 함. 캐시는 레지스터와 종류가 다름.
  • 캐시는 버퍼 역할을 함. 엄청 빠른 레지스터와 메인 메모리 사이에서 둘의 속도 차를 완화시켜주는 역할. 어떻게? 자주 사용하는 프로그램이나 데이터를 메인메모리뿐만이 아니라 캐시 메모리에도 저장을 해놓음.
  • CPU 레지스터에서 그 메모리를 사용하려고 할 때 캐시에 있을 경우 메인 메모리까지 안가고 캐시에서 바로 꺼내올 수 있음. 이것을 Cache Hit 이라고 함. 없으면 Cache miss. 내가 찾는 메모리가 캐시에 얼마나 있는지를 Hit Ratio 로 표현함.

메인 메모리

  • 메인 메모리의 종류는 RAM 과 ROM 이 있음.
    RAM 에는 SRAM (캐시)과 DRAM (메인 메모리)이 있음.
    ROM 은 컴퓨터가 만들어졌을때부터 저장된 내용이 있는 경우, 우리가 관여할 수 없는 부분.
    RAM 은 전원 끄면 내용이 다 날아가고, ROM 은 Vios(? 공장초기화와 관련된 내용) 와 관련된 내용, 날아가지 않음.

레지스터에서는 캐시 Hit 을 하는 것이 훨씬 빨라서 캐시에 저장된 데이터를 가져오는게 훨씬 빠름. 그러나 캐시메모리가 너무 비싸서 캐시를 많이 못보는 것임
상대적으로 싼 DRAM 을 사용

보조기억장치

없어도 컴퓨터 동작 함. 영화 등 용량이 큰 파일을 저장해 놓을 때 사용.

3. 운영체제

  • 자원( = 메모리)을 운영체제가 운영하도록 되어있음

운영체제가 주로 하는 일

  1. CPU 를 관리함
  2. 메모리를 할당하고 돌려받는 것.
    메인메모리(DRAM) 자원을 관리함. 예전에는 DRAM 이 더 비쌌어서 효율적으로 관리하는게 더 중요했음. 어떤 프로세스에 메모리를 할당했다가 뺏어왔다가 하는 것
  3. 저장소(디스크)관리
    하드디스크 등 보조기억장치 관리
  4. 입출력장치 관리
    마우스, 프린터 등…

  • 프로그램 : 아직 실행되지 않은 파일 코드 덩어리 자체. 아직 메모리 할당을 받지 않은 상태.
  • 프로그램을 실행시키면 운영체제로부터 컴퓨터 메모리의 한 공간을 할당받게 됨.
  • 그 순간 컴퓨터가 우웅 하고 돌아감~
  • 프로그램을 실행해서 운영체제로부터 메모리를 할당받은 것을 프로세스라고 함!
  • 운영체제는 코드를 읽고 분석해서 그 내용에 맞는 메모리를 적절하게 섞어서 프로그램에 할당해줌.
  • 여러 프로그램을 실행시켰을 경우 각각의 프로세스가 독립적인 메모리 공간을 할당받음.
  • 멀티 프로세스 : 여러개의 프로세스를 동시에 실행할 수 있는 개념.(우리가 창 여러개 띄워놓고 쓸 수 있는 것!)
    • 동시에 실행한다는 것의 두가지 의미란⇒
      • CPU 코어가 여러개일 때 각각의 코어가 프로세스르 계산하면서 여러 코어에서 동시에 실행되는 것,
      • 한개의 코어가 프로세스를 번갈아서 계산하는 것을 의미하기도 함.


프로세스 내부 구조


스레드

프로세스 내에 스레드가 존재하여 서로 자원과 상태를 공유할 수 있음.
힙, 스택이 메모리구조임.
한 프로세스 안에서 코드, 데이터, 힙 영역은 공통 영역임.
한 프로세스 안에 여러개의 스레드가 있음(멀티 스레드).
메모리를 그 프로세스 안에서 어떻게 관리하고 있는지?
코드, 데이터, 힙 영역은 공통으로 접근할 수 잇음.
스레드는 프로세스 안에서 실행 가능한 각 작업 단위. 여러개의 스레드가 동시에 실행됨.
롤 안에서 채팅을 치고, 보고, 게임이 돌아가고 하는 한 프로세스 안에서 여러개의 동작이 동시에 처리될 수 있는 이유가, 각각의 동작에 스레드라는 작업단위가 부여되어서 동시에 처리하고 동작해서 임.

메모리 영역 공유

프로세스는 운영체제에서 받은 메모리를 독립적으로 사용함.(롤, 엑셀의 메모리 영역은 따로.) 프로세스간 메모리 영역 공유 X!
프로세스 안의 스레드는 프로세스가 운영체제에서 공유받은 메모리영역을 공유하는데, 스택을 빼고 공유함.
스레드 영역은 따로. 공통은 코드 데이터 힙.

스레드의 특징

스레드에서 스레드로 넘어갈 때 코드 데이터 힙 공통영역은 공용으로 사용하고 있으니까 속도가 느려지지 않음.

멀티 스레딩의 문제점

스레드는 다른 스레드와 독립적으로 동작하기 때문에 실행, 종료 순서 예측이 불가능해서 동시성 문제가 발생함.
공유자원이라는 공간이 있음. 롤과 카톡이 한 모니터로 접근하는 경우. 멀티프로세스가 공유자원 공간을 같이 쓰기 때문에 둘 다 프로세스 종료 안되고 모니터에 띄울 수 있는 것임.
동시성 문제는 운영체제가 해결하고 있기 때문에 우리가 사용하고 있는 것임.
데드락 문제 : 프로세스가 다 니가 가진 자원들 내놓으라고 하는 교착상태

자바스크립트는 싱글스레드 언어다.

자바스크립트는 싱글스레드를 선택하고 동시성 문제를 포기했음.
실행 콘택스트와 스택이 하나밖에 없는 싱글스레드 언어임.
우리에게 와닿지 않는 이유는 노드 등의 런타임 환경이 이것을 보완하고 있기 때문임.

profile
새싹 프론트엔드 개발자

0개의 댓글