๊ด€๋ฆฌ ๋ฉ”๋‰ด

๋ง๊ฐ๋กœ๊ทธ

ํฌ๋ž˜ํ”„ํ†ค ์ •๊ธ€ WEEK08 DAY65 - PintOS Project2 USER PROGRAM ๋ณธ๋ฌธ

Krafton jungle

ํฌ๋ž˜ํ”„ํ†ค ์ •๊ธ€ WEEK08 DAY65 - PintOS Project2 USER PROGRAM

habbn 2024. 3. 12. 23:11
728x90
๐Ÿ“†2024.3.12

1.  PintOS Project 2 - GitBook 
2. ๋ฐฑ์ค€ ๋ฌธ์ œ ํ’€๊ธฐ

 

์ด๋ฒˆ์— ์šฐ๋ฆฌ๊ฐ€ ๊ตฌํ˜„ํ•ด์•ผ ํ•  ๋ฌธ์ œ๋ฅผ ์•Œ๊ธฐ ์œ„ํ•ด์„œ GitBook์„ ์ฝ์—ˆ๋‹ค.

 

์šฐ์„  Argument Passing ์ธ์ž ์ „๋‹ฌ ๋ถ€๋ถ„์„ ๊ตฌํ˜„ํ•ด์•ผํ•œ๋‹ค.

์ฝ”์น˜๋‹˜๊ป˜์„œ Project2. argument passing์€ ํฌ์ธํ„ฐ๋ฅผ ์ •ํ™•ํ•˜๊ฒŒ ์ดํ•ดํ•˜๊ณ  ์žˆ๋‹ค๋ฉด ์ถฉ๋ถ„ํžˆ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ณผ์ œ๋ผ๊ณ  ํ–ˆ๋‹ค.

hex_dump๋ฅผ ์ด์šฉํ•ด ๋‚ด๊ฐ€ ๋„˜๊ธด argument๋“ค์ด ๋ฉ”๋ชจ๋ฆฌ์˜ ์ •ํ™•ํ•œ ์œ„์น˜์— ์ €์žฅ๋จ์„ ํ™•์ธํ•˜๋ฉด ๋˜๋Š” ๊ณผ์ œ๋‹ค.

 

gitbook์„ ๋ณด๋ฉด

Implement the argument passing.
Currently, process_exec() does not support passing arguments to new processes. Implement this functionality, by extending process_exec() so that instead of simply taking a program file name as its argument, it divides it into words at spaces. The first word is the program name, the second word is the first argument, and so on. That is, process_exec("grep foo bar") should run grep passing two arguments foo and bar.

Within a command line, multiple spaces are equivalent to a single space, so that process_exec("grep foo bar") is equivalent to our original example. You can impose a reasonable limit on the length of the command line arguments. For example, you could limit the arguments to those that will fit in a single page (4 kB). (There is an unrelated limit of 128 bytes on command-line arguments that the pintos utility can pass to the kernel.)

You can parse argument strings any way you like. If you're lost, look at strtok_r(), prototyped in include/lib/string.h and implemented with thorough comments in lib/string.c. You can find more about it by looking at the man page (run man strtok_r at the prompt).

 

ํ˜„์žฌ,  process_exec()  ํ•จ์ˆ˜๋Š” ์ƒˆ๋กœ์šด ํ”„๋กœ์„ธ์Šค๋“ค์— ์ธ์ž๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค.

process_exec() ํ•จ์ˆ˜๋ฅผ ํ™•์žฅ ๊ตฌํ˜„ํ•ด์„œ, ์ง€๊ธˆ์ฒ˜๋Ÿผ ๋‹จ์ˆœํžˆ ํ”„๋กœ๊ทธ๋žจ ํŒŒ์ผ ์ด๋ฆ„๋งŒ์„ ์ธ์ž๋กœ ๋ฐ›์•„์˜ค๊ฒŒ ํ•˜๋Š” ๋Œ€์‹  ๊ณต๋ฐฑ์„ ๊ธฐ์ค€์œผ๋กœ ์—ฌ๋Ÿฌ ๋‹จ์–ด๋กœ ๋‚˜๋ˆ„์–ด์ง€๊ฒŒ ๋งŒ๋“ ๋‹ค.

์ฒซ ๋ฒˆ์งธ ๋‹จ์–ด๋Š” ํ”„๋กœ๊ทธ๋žจ ์ด๋ฆ„์ด๊ณ , ๋‘ ๋ฒˆ์งธ ๋‹จ์–ด๋Š” ์ฒซ ๋ฒˆ์งธ ์ธ์ž์ด๋ฉฐ, ๊ทธ๋Ÿฐ ์‹์œผ๋กœ ๊ณ„์† ์ด์–ด์ง€๊ฒŒ ๋งŒ๋“ค๋ฉด ๋œ๋‹ค.

๋”ฐ๋ผ์„œ ํ•จ์ˆ˜, process_exec("grep foo bar")   ๋Š”๋‘ ๊ฐœ์˜ ์ธ์ž foo์™€ bar๋ฅผ ๋ฐ›์•„์„œ grepํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰์‹œ์ผœ์•ผ ํ•œ๋‹ค.

 

์ปค๋งจ๋“œ๋ผ์ธ์—์„œ, ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ณต๋ฐฑ์€ ํ•˜๋‚˜์˜ ๊ณต๋ฐฑ๊ณผ ๊ฐ™๊ฒŒ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ  process_exec("grep    foo   bar")   ๋Š” ์œ„์˜ ์›๋ณธ ์˜ˆ์‹œ์™€ ๋™์ผํ•˜๊ฒŒ ๋™์ž‘ํ•ด์•ผ ํ•œ๋‹ค. 

 

์ธ์ž๋กœ ๋“ค์–ด์˜จ ๋ฌธ์ž์—ด์€ ๋‹น์‹ ์ด ์›ํ•˜๋Š” ๋Œ€๋กœ ํŒŒ์‹ฑํ•˜๋ฉด ๋œ๋‹ค. 

๋งŒ์•ฝ ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ์ง€ ๋ชจ๋ฅด๊ฒ ๋‹ค๋ฉด,  include/lib/string.h ์— ์žˆ๋Š” strtok_r() ํ•จ์ˆ˜์™€  lib/string.c ์— ๊ตฌํ˜„๋œ ๊ฒƒ๋“ค์„ ์ฐธ๊ณ ํ•ด๋ด๋ผ.

 

๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹น.. 

 

์ผ๋‹จ gitbook  project2 : USER PROGRAMS - Introduction ๊ณผ Argument Passing ๋ถ€๋ถ„์„ ์ฝ์€ ๊ฒฐ๊ณผ

 

1. argument passing ๊ตฌํ˜„!

2. page fault () ๊ตฌํ˜„ - ์œ ์ €๊ฐ€ ์ „๋‹ฌํ•œ ์ž˜๋ชป๋œ ํฌ์ธํ„ฐ์— ๋ฌธ์ œ ์—†์ด ์ž˜ ๋Œ€์‘ํ•˜๊ธฐ ์œ„ํ•ด์„œ

(๊ตฌํ˜„ ์ˆœ์„œ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋˜๋Š”์ง€๋„ ์•„์ง ์ž˜ ๋ชจ๋ฅด๊ฒ ๋‹ด)

 

2๊ฐœ์˜ ํ•ฉ๋ฆฌ์ ์ธ ๋ฐฉ๋ฒ•์ด ์žˆ๋Š”๋ฐ ์ฒซ ๋ฒˆ์งธ ๋ฐฉ๋ฒ•์€ ์œ ์ €๊ฐ€ ์ „๋‹ฌํ•œ ํฌ์ธํ„ฐ์— ๋ฌธ์ œ๊ฐ€ ์—†๋Š”์ง€ ๊ฒ€์‚ฌํ•œ ํ›„์— ์—ญ์ฐธ์กฐํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

๋‘ ๋ฒˆ์งธ ๋ฐฉ๋ฒ•์€ ์œ ์ €๊ฐ€ ์ „๋‹ฌํ•œ ํฌ์ธํ„ฐ๊ฐ€ KERN_BASE ๋ณด๋‹ค ์•„๋ž˜ ๋ถ€๋ถ„์„ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋Š”์ง€ ๊ฒ€์‚ฌํ•œ ํ›„์— ์—ญ์ฐธ์กฐํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

์ฒซ ๋ฒˆ์งธ ๋ฐฉ๋ฒ•์ด ๊ฐ€์žฅ ์‰ฝ๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด๊ณ  ๋‘ ๋ฒˆ์งธ ๋ฐฉ๋ฒ•์ด ๋‹ค๋ฃจ๊ธฐ ๊นŒ๋‹ค๋กญ๋‹ค๊ณ  ํ•˜๋Š”๋ฐ ์–ด๋–ค ๋ฐฉ๋ฒ•์œผ๋กœ ํƒํ•  ์ง€๋Š” ๋‚ด์ผ ์กฐ์›๋“ค๊ณผ ์ƒ์˜ํ•ด๋ด์•ผ๊ฒ ๋‹ค.

 

๋ฐฑ์ค€ 2869 ๋‹ฌํŒฝ์ด๋Š” ์˜ฌ๋ผ๊ฐ€๊ณ  ์‹ถ๋‹ค
# ๋ฐฑ์ค€ 2869๋‹ฌํŒฝ์ด๋Š” ์˜ฌ๋ผ๊ฐ€๊ณ  ์‹ถ๋‹ค.
# ๋†’์ด V, ๋‚ฎ์— A๋ฏธํ„ฐ ์˜ฌ๋ผ๊ฐˆ ์ˆ˜ ์žˆ์ง€๋งŒ , ๋ฐค์— ์ž ์„ ์ž๋Š” ๋™์•ˆ B๋ฏธํ„ฐ ๋ฏธ๋„๋Ÿฌ์ง
# ์˜ฌ๋ผ๊ฐ€์•ผํ•  ๋†’์ด = V-B
# ํ•˜๋ฃจ์— ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๊ฑฐ๋ฆฌ = A-B
# ์˜ฌ๋ผ๊ฐ€์•ผํ•  ๊ฑฐ๋ฆฌ % ํ•˜๋ฃจ์— ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๊ฑฐ๋ฆฌ == 0 ์ด๋ฉด ๋‚ฎ ๋™์•ˆ ์ •์ƒ๊นŒ์ง€ ๊ฐ”๋‹ค๋Š” ๋ง
# ์˜ฌ๋ผ๊ฐ€์•ผํ•  ๊ฑฐ๋ฆฌ % ํ•˜๋ฃจ์— ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๊ฑฐ๋ฆฌ != 0 ์ด๋ฉฐ ๋‚ฎ ๋™์•ˆ ๋ชป๊ฐ -> ํ•˜๋ฃจ ๋” ๊ฑธ๋ฆผ +1

A,B,V = map(int,input().split())

if (V-B)%(A-B) == 0:
    print((V-B)//(A-B))
else:
    print((V-B)//(A-B)+1)

 

728x90