전체 글 133

프로세스 스케줄러

프로세스 스케줄링하기 위한 큐는 3가지이다. Job Queue : 현재 시스템 내에 있는 모든 프로세스의 집합, 메모리 할당을 대기중이다. Ready Queue : 현재 메모리 내에 있으면서 CPU 를 잡아서 실행되기를 기다리는 프로세스의 집합, CPU 할당을 대기중이다. Device Queue : Device I/O 작업을 대기하고 있는 프로세스의 집합, 입출력 장치 할당을 대기중이다. 프로세스가 시스템에 들어가면 이들은 잡 큐에 넣어진다. 잡큐는 시스템에서 모든 프로세스들이 존재하는 곳이다. 메인메모리에 거주하는 프로세스들은 레디 큐라고 불리우는 리스트에서 실행되기를 기다리고 대기를 한다. 스케줄러의 종류도 3가지이다. 장기 스케줄러 - 어떤 프로세스를 ready queue에 보낼지 메모리는 한정되어..

CS/운영체제 2023.09.15

멀티 쓰레드 vs 멀티 프로세스

장점 프로세스보다 메모리 공간과 시스템 자원 소모가 줄어든다. Heap 영역을 통해서 통신을 할 수 있다.(프로세스는 IPC) context switch는 프로세스 context switch 와 달리 캐시 메모리를 비울 필요가 없기 때문에 더 빠르다. 쓰레드는 공유하는 영역이 많기 때문에 컨텍스트 스위칭이 빠르다. 캐쉬는 CPU와 메인메모리 사이에 위치하며 CPU에서 한번 이상 읽어들인 메모리의 데이터를 저장하고 있다가, CPU가 다시 그 메모리에 저장된 데이터를 요구할 때, 메인메모리를 통하지 않고 데이터를 전달해 주는 용도이다. 프로세스 컨텍스트 스위칭이 일어났을 경우, 공유하는 데이터가 없으므로 캐쉬가 지금껏 쌓아놓은 데이터들이 무너지고 새로 캐쉬정보를 쌓아야 한다. 이것이 프로세스 컨텍스트 스위칭..

CS/운영체제 2023.09.14

Context Switching

Context Switching 프로세스의 상태 정보를 저장하고 복원하는 일련의 과정 프로세스는 CPU를 할당받아 작업을 하다가 프로세스 전환(context switching)이 발생하면 진행하던 작업을 저장하고 CPU를 반환한다. 이 때 작업의 진행상황을 모두 PCB에 저장한다. 다시 할당받으면 PCB에 있는 것을 불러와서 다시 작업을 진행한다. 보통 인터럽트가 발생하거나, 실행 중인 CPU 사용 허가시간을 모두 소모하거나, 입출력을 위해 대기해야 하는 경우에 Context Switching이 발생 저장되는 정보 프로세스 식별자(Process ID, PID) : 프로세스 식별번호 프로세스 상태 : new, ready, running, waiting, terminated 등의 상태를 저장 프로그램 카운터..

CS/운영체제 2023.09.13

프로세스와 쓰레드의 차이

프로세스 정의 : 프로세스는 실행 중인 프로그램으로 디스크로부터 메모리에 적재되어 CPU 의 할당을 받을 수 있는 것을 말한다. code data stack heap을 모두 따로 할당받는다. data - 전역 변수 stack - 함수의 매개변수, 복귀주소와 같은 임시자료 heap - 동적할당 메모리 프로세스 제어 블록(Process Control Block, PCB) 정의 : PCB는 특정 프로세스에 대한 중요한 정보를 저장하고 있는 운영체제의 자료구조이다. 생성 : 프로세스의 생성과 동시에 고유한 PCB를 생성한다. 존재 이유 : context swtich를 위해 관리 : 링크드 리스트로 관리. 프로세스 생성 과정 PCB가 생성되며 OS가 실행한 프로그램의 코드를 읽어들여 프로세스에 할당된 메모리의 T..

CS/운영체제 2023.09.12

운영체제란?

💡 운영체제 운영체제란? 컴퓨터 하드웨어 바로 위에 설치되어 사용자 및 다른 모든 소프트웨어와 하드웨어를 연결하는 소프트웨어 계층 운영 체제의 목적 컴퓨터 시스템을 편리하게 사용할 수 있는 환경을 제공 컴퓨터 시스템의 자원을 효율적으로 관리한다. CPU, 메모리, I/O 장치 등의 효율적 관리 💡 커널이란? 커널은 운영 체제와 하드웨어 간의 인터페이스 역할을하며, 다음 4가지 기능을 수행한다. 메모리 관리 : 메모리가 어디에서 무엇을 저장하는 데 얼마나 사용되는지를 추적한다. 프로세스 관리 : 어느 프로세스가 CPU를 얼마나 오랫동안 사용할지를 결정한다. 장치 드라이버 : 하드웨어와 프로세스 사이에서 중재자/인터프리터의 역할을 수행한다. 시스템 호출 및 보안 : 프로세스의 서비스 요청을 수신한다. 커널은..

CS/운영체제 2023.09.11

9월 10일 상태 점검

소프트웨어 마에스트로(이하 소마)를 시작할 때 이루고자 했던 것들을 다시 환기시키면서 현재 내 상태를 점검하고자 한다. 소마에서 얻고자 했던 것 1. 앞으로 개발자 업무를 하면서 꾸준히 의견 공유할 수 있는 동료 2. 전공자 수준의 CS지식 3. 취업 먼저 1번은 성공했다. 소마에는 현업에서 개발 업무를 하고 있는 멘토님들이 계시고 업무에 대한 의문점이 들 때마다 여쭤보면 질의 응답을 잘 받아주신다. 나는 질문하기 전에 충분히 고민을 하고 시도했던 방법들을 정리해서 물어보는 것을 좋아하는데 이 과정 속에서 다른 연수생들과의 의사소통이 자연스럽게 될 수 밖에 없다. 센터에 자주 나가는 이점이라고도 할 수 있겠다. 이 과정 속에 효율적으로 의사 소통하는 법도 조금씩 깨달아가는 것 같다. 소마 전에는 단순히 ..

일상 2023.09.10

Filter vs Interceptor vs AOP

Filter vs Interceptor Filter J2EE 표준 스펙 기능으로 디스패처 서블릿에 요청이 전달되기 전/후에 url패턴에 맞는 모든 요청에 대해 부가작업을 처리할 수 있는 기능을 제공한다. 스프링 밖에 존재한다. 스프링 컨테이너가 아닌 톰캣과 같은 웹 컨테이너(서블릿 컨테이너)에 의해 관리된다. (스프링 빈으로 등록은 된다.) Interceptor J2EE 표준 스펙인 필터와는 달리 Spring이 제공하는 기술로써, 디스패처 서블릿이 컨트롤러를 호출하기 전과 후에 요청과 응답을 참조하거나 가공할 수 있는 기능을 제공한다. 스프링 안에 존재한다. 디스패처 서블릿은 핸들러 매핑을 통해 적절한 컨트롤러를 찾도록 요청하는데 , 그 결과로 실행 체인(HandlerExecutionChain)을 돌려준..

개발용 배포용 설정 파일 분리하기

secret 변수는 -secret.yml 에서 관리하고 나머지는 .yml 에서 프로파일별로 나누어서 작성해주면 된다. 그러면 spring.profiles.active 와 include 차이가 뭘까? active는 활성화할 프로파일을 지정하는 데 사용됨. include는 @Configuration 클래스에서 프로파일을 조건부로 적용하기 위해 사용된다. include 예제 @Configuration @Profile("dev") public class DevConfiguration { // Dev 환경에서만 필요한 설정 } 일반적으로는 ‘spring.profiles.active’를 사용하여 프로파일을 지정하고 필요한 설정을 관리하는 것이 일반적이다. ‘include’는 주로 ‘.yml’로 분리된 설정을 관리하..

Composite 패턴

요약 : 그릇과 내용물을 동일시한다. 복수와 단수를 동일시한다. (여러 개를 모아서 마치 하나의 것처럼 취급하는 것) → 복합 객체를 구성하는 개별적인 객체들을 모두 동일한 방법으로 다룰 수 있게 하는 패턴 예시 : 파일 시스템의 ‘file’과 ‘directory’ file과 directory는 서로 다르지만, 둘 다 ‘directory 안에 넣을 수 있는 것’ 이라는 공통 속성을 이용한다. → file과 directory를 directory entry이라고 부르고 같은 종류로 동일시하는 것 (composite 패턴의 조건) 예제 프로그램 클래스 목록 이름 설명 Entry File과 Directory를 동일시하는 추상 클래스 File 파일 클래스 Directory 디렉터리 클래스 Main 동작 테스트용 ..

ALB health check unhealty 이슈

분명히 타겟그룹에 설정한 ec2가 정상적으로 돌아가는 것을 확인했는데 health check를 하면 자꾸 unhealty가 나왔다. healty check 요청은 30초마다 한번씩 체크하고 2번이 연속적으로 실패하면 unhealty를 띄워준다. 먼저 요청이 제대로 오는지 확인했다. 해당 EC2로 접근해 다음 명령어를 통해 80으로 들어오는 신호를 기다렸다. sudo tcpdump -i ens5 port 80 -vvv 30초 단위로 일정한 health-check 요청이 들어오는 것을 확인할 수 있다. 그렇다면 왜 unhealty인 것인가? 순간 든 생각이 지정된 80포트로 healty-check가 고정으로 들어오고 응답해준다면 80포트는 우리가 사용할 수 없는 것인가 생각했다. 실제로 alb의 health..