Notice
Recent Posts
Recent Comments
Link
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

다재다능 개발자 성장기 🚀

항해99 👩‍💻24일차 TIL 본문

항해99_6기_TIL

항해99 👩‍💻24일차 TIL

merrytang 2022. 3. 31. 01:10

🎉오늘의 한 일🎉

1. 기존의 프로젝트에서는 PostId를 따로 생성하지 않고 글작성시각 변수(borderDate)를 아이디로 삼아서 게시글 출력,수정,삭제 기능을 구현했었다. 그런데 오늘 댓글기능을 구현하려고 보니 PostId와 CommentId가 따로 필요하다는걸 알았다. 그래서 글작성시각과 댓글작성시각을 date함수로 구해서 변수로 만들어주고 그 변수들을 다시 CrypyoJs 암호화방식을 사용하여 PostId와 CommentId로 생성해주어서 기존의 글작성시각을 기준으로 만들어둔 코드들을 PostId에 맞게 모두 수정하고 댓글작성,출력기능을 추가하였다. 

 


⭐CS 스터디

PCB ( Process Control Block ),(task control block)

PCB란 운영체제가 프로세스를 제어하기 위해 정보를 저장해 놓는 곳으로, 프로세스의 상태 정보를 저장하는 구조체이다.

 

운영체제는 하드웨어가 효율적으로 동작할 수 있도록 관리해주는 소프트웨어인 프로그램이다.

운영체제라는 프로그램이 프로세스를 하나 만들어서 실행을 하려면 프로세스가 가지고 있는 기본적인 정보들이 저장되어 있어야 하고 그 정보들이 저장되어 있는 곳이 PCB이다.

 

먼저 PCB의 데이터 구조부터 알아보자.

대략적인 PCB 다이어그램

(1) Process ID : 프로세스를 구분하는 고유한 ID

(2) Process State : 프로세스의 순간 상태를 알려줌. 예) New, Running, waiting, terminated 상태

(3) Program Counter : 해당 프로세스에 대해 실행되어야 하는 다음 명령어의 주소를 나타냄.

(4) CPU Register : 프로세스에서 사용중인 레지스터를 알려줌. 인덱스 레지스터, 스택포인터, 범용레지스터 등과 같이                             다양한 종류의 레지스터가 있다. 

(5) CPU Scheduling Information : 실행을 기다리는 많은 프로세스 중에서 어떤 프로세스가 먼저 실행되어야

                                              하는지 결정하거나 프로세스가 실행되어야 하는 순서를 결정한다.

                                              우선 순위, 최종 실행시간, CPU 점유시간 등이 포함된다.

(6) Memory Information : 해당 프로세스 주소공간 정보를 저장.

(7) Process Information : 페이지 테이블, 스케줄링 큐 포인터, 소유자, 부모 등

(8) Device I/O Status : 프로세스에 할당된 입출력 장치 목록, 열린 파일 목록 등

(9) Pointer : 부모 프로세스에 대한 포인터, 자식 프로세스에 대한 포인터, 프로세스가 위치한 메모리 주소에 대한

                포인터, 할당된 자원에 대한 포인터 정보가 들어있음.

(10) Open File List : 프로세스를 위해 열려있는 파일의 리스트

 

 

 

PCB에 프로세스의 정보를 담는 이유 CPU에 급한 프로세스 처리때문에 긴급 요청이 왔을 때 기존에 작업하던

프로세스를 임시 저장을 해놓고 급한 일을 빨리 처리한 후에 PCB에 담긴 정보로 다시 불러오기 위해서이다. 이때

CPU Scheduling Information 의 우선순위로 어느 프로세스가 급한지 결정한다.

 

Context Switching

Context Switching란 현재 진행하고 있는 Task(Process, Thread)의 상태를 저장하고 다음 진행할 Task의 상태 값을

읽어 적용하는 과정을 말한다.

 

Task의 대부분 정보는 레지스터에 저장되고 PCB로 관리되고 있다. 현재 실행하고 있는 Task의 PCB 정보를 저장하게 된다. 다음 실행할 Task의 PCB 정보를 읽어 레지스터에 적재하고 CPU가 이전에 진행했던 과정을 연속적으로 수행을

할 수 있다.

 

그림으로 설명해보자.

 

그림을 보면 P0이 executing되다가 다른 프로세스 p1을 수행시키기 위해 PCB0에다가 P0 프로세스 정보를 저장한다.

그리고 레지스터에 PCB1에 저장되어 있던 P1 정보를 가져와 P1을  수행시킨다.

이렇게 수행중인 프로세스를 변경할 때 레지스터에 프로세스의 정보가 바뀌는 것을 Context Switching 이라고 한다.

 

즉, Context Switching 이란 CPU가 이전의 프로세스 상태를 PCB에 보관하고, 또 다른 프로세스의 정보를 PCB에서 읽어 레지스터에 적재하는 과정을 말한다. 프로세스가 준비 -> 실행, 실행 -> 준비, 실행 -> 대기 등으로 상태 변경될 때 발생한다.

 

IPC (Inter Process Communication)

프로세스는 독립적으로 실행된다. 즉, 독립 되어있다는 것은 다른 프로세스에게 영향을 받지 않는다고 말할 수 있다. (스레드는 프로세스 안에서 자원을 공유하므로 영향을 받는다)

하지만 이런 독립적 구조를 가진 프로세스 간의 통신을 해야 하는 상황이 있을 것이다. 이를 가능하도록 해주는 것이 바로 IPC 통신이다.

 

IPC의 모델은 크게 두가지가 있다. 하나는 Message Passing 방식, 다른 하나는 Shared Memory 방식이다.

두 모델의 차이는 서로 다른 프로세스의 데이터의 전달방식이다.

 

먼저 MP (Message Passing)방식은 그림처럼 기존에 형성되어 있던 커널을 거쳐서 메세지를 전달하는 방식이다.

MP의 장점 

  • 기존에 있던 커널을 활용하기 때문에 구현이 쉽다. 
  • 같은 파일을 전달하는데 있어서 충돌이 발생하지 않는다.

MP의 단점 

  • 커널을 통하기 때문에 커널에 저장하기 위한 공간이 필요하다.
  • 속도도 직접 전달하는 방식에 비해 느리다.
  • 유저레벨과 커널레벨을 넘나들기 때문에 매번 시스템 콜이 호출되고 이로인해 overghead가 발생할 수 있다.

반면 SM (shared Memory)방식은 프로세스 사이의 shared 공간에 메세지를 전달하는 방식이다.

프로세스간에 공유가 되도록 설정해놓은 메모리이며, 모든 프로세스가 접근이 가능하다.

공유 메모리의 경우에는 처음 생성할 때만 시스템 호출을 사용하기 때문에 속도가 빠르고.

속도가 빠르기때문에 많은 양의 데이터를 전달하는 경우에 많이 사용된다.

 

SM의 장점 

  • 레벨을 넘나들지 않기 때문에 시스템 콜을 호출할 필요가 없다.
  • 커널의존성이 낮다.
  • 속도가 빠르다

SM의 단점 

  • 생성 공간의 제한이 존재한다.

 

🐣배운 점🐣

req.params 

 /blog/:PostId

위와같은 경로에서 파라미터로 넘어온 "PostId" 속성을 req.params.PostId 형식으로 받아서 사용할 수 있다. 

 https://api/blog/111111일 경우 111111를 받는다. 

 

req.query

https://query/user?Nickname=병아리 

위와같은 경로에서 쿼리 문자열(query string) 파라미터에 키("Nickname")와 값이 포함되어 있을 때 req.query.Nickname 형식을 사용하여 값("병아리")을 가져온다. 

 

req.body

{
     "email": "banana@naver.com",
     "password": "apple" 
}

request body에 key-value의 데이터가 담긴 객체 프로퍼티이다. 프런트앤드에서 JSON과 같은 데이터를 받을 때 사용한다. 서버에서 사용하기 위해서는 app.js에서 아래와 같은 설정을 해줘야된다. 

app.use(express.json());
app.use(express.urlencoded({extended:true}));

 

'항해99_6기_TIL' 카테고리의 다른 글

항해99 👩‍💻26일차 TIL  (0) 2022.04.02
항해99 👩‍💻25일차 TIL  (0) 2022.03.31
항해99 👩‍💻23일차 TIL  (0) 2022.03.30
항해99 👩‍💻22일차 TIL  (0) 2022.03.28
항해99 👩‍💻21일차 TIL/WIL  (0) 2022.03.27