Goal

  • 컴퓨터가 어떻게 프로그램을 실행시키는 가 ?
  • 프로그램 vs 프로세스
  • CPU bound 애플리케이션 vs I/O bound 애플리케이션
  • hash연산을 위해 CPU를 극단적으로 사용하는 애플리케이션 만들기
  • GCP 인스턴스에 CPU bound 애플리케이션 수동 배포

* 컴퓨터 주요 부품들 ..

하드디스크 ,메모리, CPU

- 애플리케이션은 하드디스크에 저장 ->프로그램이라 한다.

- 하드디스크에 있는 프로그램을 실행시키면 프로그램의 내용이 메모리 위에 올라간다. -> 프로세스라 한다.

- 여러개의 프로세스가 함께 메모리에 올라가 있다.

- 그 프로세스 중 누군가는 CPU에 의해 실행된다.

- 어떤 프로세스가 실행될지 결정하는 것 : 스케줄링

 

Q. 메모리가 왜 끼어 있을까 ? 걍 하드디스크에 붙어서 전부 계산하면 되지 않나 ?

메모리가 중간에 있는 이유는 이 장치들간의 속도 차이 때문이다.

CPU는 하드디스크보다 빠르다.

CPU가 프로세스를 실행시키기 위해 하드디스크에 직접 요청하면 CPU가 아무리 빨라도 그 속도는 거의 하드디스크의 속도와 같아진다. (병목현상 발생)

그래서 중간에 속도차이를 줄여 주기 위한 메모리가 존재

메모리와 CPU간의 차이 마저 줄이기 위해 메모리보다는 빠르고 CPU보다는 느린 캐시메모리 같은 장치도 사용된다.

 

CPU는 하디스크와 직접 통신하는것은 아니지만 결국 하드디스크와 상호작용을 해야할 필요는 있다.

CPU는 다른 프로세스를 실행시킴으로써 최대한 CPU를 효율적으로 사용

 

I/O : Input / Output

프로세스가 I/O하는 동안에는 다른 프로세스가 CPU를 사용한다.

I/O종류에는 하드디스크 뿐만 아니라 DB나 네트워크에대한 I/O도 있다.

 

I/O Bust vs CPU Burst

I/O Bust : 한 프로세스 실행 도중 I/O를 하는 시간을 I/O burst라고 한다.

CPU Burst : CPU에서 실행되는 시간

 

I/O Bound application vs CPU Bound application

I/O Bound application : 해당 프로세스가 전체적으로 I/O를 많이 하는 애플리케이션

CPU Bound application : 전체적으로 CPU를 많이 사용하는 애플리케이션 

 

Q. CPU를 특별히 많이 쓰는 프로그램도 있나 ?

I/O를 적게 사용하고 CPU연산을 많이 사용하는 애플리케이션이 CPU를 많이 쓰는 프로그램

 

Hash 연산을 많이 반복하는 애플리케이션을 만들어 CPU를 많이 쓰는 프로그램만들기

-MD 5 Hash 연산

-Hash 알고리즘은 동일한 입력을 넣으면 동일한 출력이 나오는 특성이 있다. 그래서 파일내용이 변경되었는지 확인하는 무결성 검사를 위해 사용된다.

-Hash를 10만번이..

    @RequestMapping("/hash/{input}")
    public String getDigest(@PathVariable("input") String input) throws NoSuchAlgorithmException {
        for(int i = 0; i < 100_000; i++) {
            input = getMD5Digest(input);
        }
        return input;
    }

 


* 루트계정으로 모든 명령어를 실행하기 시작하면 보안상 문제가 된다

  1. 애플리케이션이 로그를 출력한다.
  2. 애플리케이션이 로그를 출력할 디렉토리가 루트 권한으로 만들어졌다.
  3. 개발자는 권한 문제 떄문에 안되네 그럼 sudo 붙여야지 하면서 루트 권한으로 실행하여 애플리케이션을 실행한다.
  4. 애플리션은 루트 권한으로 실행된다
  5. 애플리케이션에 취약점을 이용한 공격이 발생하면 애플리케이션이 아니라 시스템 전체의 권한이 해커에게 노출된다.

루트 권한을 남용하기 시작하면 위와 같은 상황이 발생하기 쉽다. 루트 권한이 아니라 모든 디렉토리와 애플리케이션에 적절한 권한을 부여하는 게 좋다.

 


* Point "어떤 프로세스는 CPU를 많이 사용하고 어떤 프로세스는 DB를 많이.. 여러 관점에서 생각해봐야한다." 

어떤 프로세스가 얼마나 많은 트래픽을 처리할 수 있을지는 측정해 보기 전에 알기 어렵다.

물리적으로 core가 1개인 서버가 초당 10만큼의 데이터를 처리 할 수 있다고해서 core가 8개인 서버는 초당 80만큼의 데이터를 처리할 수 있지않다.

보통 그보다 더 적은 효율을 보인다.

이유는 애플리케이션이 사용하는게 다양하기 때문이다.

CPU, 메모리 ,디스크, 네트워크 그리고 DB 등 여러가지 요소를 사용한다.

그래서 반드시 일정 이상의 트래픽을 받아야하는 시스템을 만들어야한다면 실제 그 트래픽을 흘려보기전까지 알 수 없다.

 


https://velog.io/@hax0r/%EC%84%A0%EC%A0%90%EB%B9%84%EC%84%A0%EC%A0%90-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4-%EC%8A%A4%EC%BC%80%EC%A4%84%EB%A7%81

 

프로세스 스케줄링, 그리고 기법

도커에서 프로세스 스케줄링 하다가 이전에 정처기에서 학습했던 선점/비선점 스케줄링에 대한 이해도 떨어지는 것 같아 정리할 겸 글을 남긴다.

velog.io

 

https://medium.com/@yeon22/crypto-%ED%95%B4%EC%8B%9C-hash-%EB%9E%80-6962be197523

 

(Crypto) 해시(hash)란?

해시(hash)란 단방향 암호화 기법으로 해시함수(해시 알고리즘)를 이용하여 고정된 길이의 암호화된 문자열로 바꿔버리는 것을 의미합니다.

medium.com

 

'* > What I did today' 카테고리의 다른 글

서버가 죽는 이유 ,message queue  (0) 2022.07.20
AWS Certified Cloud Practitioner - 합격 후기, 참고자료 정리  (4) 2021.12.14
11/5 (함께자라기)  (1) 2021.11.06
11/03  (0) 2021.11.03
URL Scheme  (0) 2021.10.02
JDBC / SQL Mapper / ORM / Persistence / 패러다임불일치  (0) 2021.09.26
9/23  (0) 2021.09.24
9/21  (0) 2021.09.21

+ Recent posts