Computer Science 6

[Java] JVM을 파헤쳐보자: 1. 메모리 구조와 멀티스레드

JVM이란? 자바를 공부하는 사람이라면 JVM에 대한 이야기를 많이 들어보았을 것이다. JVM이란 Java Virtual Machine의 약자로, 자바로 작성된 프로그램을 실행시켜주기 위한 가상 머신(가상의 컴퓨터, 컴퓨터안의 컴퓨터)이다. JVM은 Java를 플랫폼 독립적인 언어로 만들어준다는 특징과, 메모리를 관리하고 최적화 해주는 기능이 존재한다는 특징이 존재한다. 여기서 플랫폼 독립적이라는건, 어떤 운영체제 상에서 작성된 프로그램이든 모두 문제없이 돌아간다는 것인데, 이를 가능토록 중개해주는 것이 바로 JVM의 역할이다. 또한 Java이전에는 프로그램 메모리를 모두 SW개발자가 관리했다면, JVM은 가비지 컬렉터를 통해 자동으로 메모리 관리를 해준다! 따라서 개발자는 운영체제에 맞는 JVM만 깔아..

[운영체제/OS] 데드락(DeadLock, 교착상태)의 개념, 발생 조건, 처리방법

데드락의 개념 데드락 이란 ? 두개 이상의 프로세스나 스레드가 서로 자원을 얻지 못해 다음 처리를 하지 못하는 상태 '교착 상태'라고도 부르며, 시스템적으로 한정된 자원을 여러곳에서 사용할때 발생 '외나무 양끝에서 두사람이 서로 비켜주기만 기다리는'것과 같으며 아래의 예시를 참고해보자! 프로세스 1과 2가 리소스1과 2를 모두 얻어야 한다고 가정하자 프로세스1이 자원1을 얻은경우 프로세스2는 자원1을 얻을수없고, 프로세스2가 자원2를 가지고 있으므로 프로세스1은 자원2를 얻을 수 없다. 두 프로세스는 무한정 wait 상태에 빠지게되며, 이게바로 DeadLock 데드락의 발생 조건 발생 조건 설명 상호배제(Mutual Exclusion) = Mutex 한번에 하나의 프로세스만이 공유자원 사용가능한 상태 점..

Computer Science/OS 2022.08.29

[운영체제/OS] 캐시(Cache)와 지역성(Locality) & 캐싱라인(Caching Line)

Cache 캐시 메모리(cache Memory) 캐시 메모리란 ? 주기억장치에서 자주 사용하는 프로그램과 데이터를 저장해두고 속도를 빠르게 하는 메모리 속도가 빠른 장치와 느린 장치간의 병목 현상을 줄여주며, 메인 메모리와 CPU사이에 위치한다 캐시가 효율적으로 동작하기 위해서는 CPU가 참조할 정보에 대한 예측이 잘 되어야함 즉, 캐시의 적중률(Hit-rate) 을 극대화 시켜야함 이때 나오는 개념이 캐시의 지역성(Locality) 캐시의 지역성(Locality)이란 데이터에 대한 접근이 시간적-공간적으로 가깝게 발생하는 것을 뜻함 이때 프로그램은 정보를 균일하게 참조하는 것이아니라, 어느 한 순간에 특정 부분을 집중 참조할 것이라는 전재 조건이 존재한다. 시간지역성 : 최근에 참조된 데이터가 곧 다시..

Computer Science/OS 2022.08.29

[운영체제/OS] Process vs Thread 그리고 멀티스레드(Multi Thread)

Process vs Thread Process를 알아보자! 프로세스의 의미 실행중인 프로그램을 의미한다. 다수의 프로그램이 병행 수행될수 있는 오늘날에는 시분할 시스템(타임쉐어링)의 작업단위로 사용됨 프로세스의 상태 변화 생성 -> 준비 : 스케줄러에 의해 프로세스가 호출됨. 준비 -> 살행 : 사전 정의된 스케줄링 알고리즘에 따라 프로세스가 CPU할당 받음. 해당과정을 디스패치(dispatch) 라고함 실행 -> 준비 : 더 높은 우선순위의 프로세스를 실행하거나, 자원할당시간 만료 후 준비상태로 다시 전환. 해당 과정을 타임아웃(Timeout) 이라 부름 실행 -> 대기 : 할당된 시간 이전 실행 중에 기타 입출력 요구, 페이지 교환, read, write 등으로 CPU를 다른 프로세서에 할당 양도한 ..

Computer Science/OS 2022.08.27

[네트워크/Network] WebSocket이란? (feat. Pooling)

웹소켓 탄생 배경 웹소켓에 대해 이야기 해보기전, 우선 polling 방식에 대해 이야기를 해보자. 우리가 흔하게 아는 클라이언트와 서버의 통신방법이다 (RestAPI 방식) 클라이언트에서 매번 필요할때 마다 request 하고 서버에서 response 해주는 방식이다. 하지만 실시간 검색어나 채팅 서비스를 생각해보자. 매번 채팅이 도달할때마다, 또는 실시간 순위가 바뀔때마다 클라이언트에서 요청을 보내야한다(!) 이를 위해 주기적으로 호출해서 서버에 내 상태를 알려주어야 하는데 이는 굉장히 낭비가 심하게 된다. 굉장히 낭비가 심하다 이것이 바로 polling 방식이다. 기본적인 게시판같은 실시간 상태 공유가 필요없는 웹게시판에서 사용하게 된다. 이를 해결하기 위해 나온게 바로 웹소켓이다! 웹소켓이란? 웹..

[Network]RestAPI 란 무엇인가?

REST API (RESTful API)란, 아키텍쳐의 제약 조건을 준수하는 애플리케이션 프로그래밍 인터페이스를 뜻한다. 글자 하나하나씩 살펴보자 Rest의 정의는? Representational State Transfer 의 약자로, 어떤 자원 이름으로 구분하여 해당 자원의 상태를 주고 받는 것을 의미한다 여기서 자원이란, 해당 SW가 관리하는 모든 것이 되며, 이름은 자원의 표현할때의 이름을 의미한다. 즉, 어떤 DB의 학생 정보가 주어져있을때 이것을 자원이라고 할 수 있으며, 학생 정보를 student라는 테이블에 저장할때 이는 'student'라는 자원의 표현으로 저장함을 의미한다 상태 전달이란 데이터가 요청되어지는 시점에 자원의 상태, 또는 정보를 전달하는 것으로, 대부분 JSON 또는 XML을..