1. Homepage
  2. Programming
  3. COMP2017 9017 Assignment 3: ProgExchange (PEX)

COMP2017 9017 Assignment 3: ProgExchange (PEX)

Engage in a Conversation
AustraliaUniversity of SydneyCOMP2017COMP9017Systems ProgrammingCPEXProgExchangeIPC

COMP2017 9017 Assignment 3 CourseNana.COM

Task description Introducing ProgExchange (PEX), a cutting-edge platform for computer programmers to buy and sell high-demand components in a virtual marketplace. The need for in-person trading has been replaced by a state-of-the-art digital marketplace, allowing for greater accessibility and faster transactions, while providing a safe and convenient way for seasoned programmers to connect and make transac- tions. As part of this assignment, you will be tasked with developing two key components of ProgExchange: the exchange itself, which will handle all incoming orders, and an auto-trading program that executes trades based on predefined conditions. With your expertise in systems programming, you will play a crucial role in bringing this innovative platform to life and helping to drive the future of computer component trading. You are encouraged to ask questions on Ed1. Make sure your question post is of " Question " post type and is under " Assignment " category →"A3" subcategory. As with any assignment, make sure that your work is your own2, and that you do not share your code or solutions with other students. To complete this assignment, you should be familiar with: •Dynamic memory allocation: malloc(), realloc(), free(), etc •open(), read(), write() system calls •Processes: fork(), exec(), waitpid(), etc •Signals: sigaction(), kill(), etc •Named Pipes (FIFOs): mkfifo() 1https://edstem.org/au/courses/10466/discussion/ 2Not GPT-3/4’s, ChatGPT’s or copilot’s, etc. 1 COMP2017 9017 PEX Some implementation details are purposefully left ambiguous; you have the freedom to decide on the specifics yourself. Additionally this description does not define all possible behaviour that can be exhibited by the system; some error cases are not documented. You are expected to gracefully report and handle these errors yourself. High Level Overview Exchange The purpose of the ProgExchange is to allow trading to happen in an efficient and orderly manner. It receives orders from traders and matches them, allowing the buying and selling of computer compo- nents. The exchange also tracks the cash balance of each trader (which starts at $0 for each trading session). For providing such trading avenue, ProgExchange collects a 1% transaction fee on all successful orders. CourseNana.COM

The following commands may be sent from traders to the exchange: BUY ; SELL ; AMEND ; CANCEL ; •BUY : An order to buy a product at or below the specified price, up to the specified quantity. •SELL : An order to sell a product at the specified price, up to the specified quantity. •AMEND : Update the quantity or price of an existing order, that has yet to be fully filled. •CANCEL : Cancel an existing order, that has yet to be fully filled. Data Types and Ranges •ORDER_ID : integer, 0 - 999999 (incremental) Order ID is unique per Trader (i.e. Trader 0 and 1 can both have their own Order ID 0). Order IDs are not reused (with the exception of Invalid orders, which can be fixed and re-sent with the same ID, given the next ID is not yet used). •PRODUCT : string, alphanumeric, case sensitive, up to 16 characters •QTY ,PRICE : integer, 1 - 999999 Products Products traded on the exchange are provided through a text file of the following structure: n_items Product 1 Product 2 ... Product N For example: 2 GPU Motherboard Page 3of 17 COMP2017 9017 PEX Basic Example •Trader 0 places a SELL order for 15 CPUs at $300 each SELL 0 CPU 15 300; •Trader 1 places a BUY order for 10 CPUs at $300 each BUY 0 CPU 10 300; •ProgExchange matches these orders, Trader 1 buys 10 CPUs from Trader 0 for $3,000 and pays $30 transaction fee. •Trader 1’s order is now fulfilled. Trader 0 has 5 CPUs remaining on the market for sale. Implementation details Write programs in C that implement ProgExchange as shown in the examples. You are guaranteed not to have NULL returned from malloc() orrealloc() in this context. Your submission must be contained in the following files and produce no errors when built and run on Ed C compiler. •pe_common.h : Common constants and structures •pe_exchange.c ,pe_exchange.h : Part 1 (Exchange, compiles to pe_exchange ) •pe_trader.c ,pe_trader.h : Part 2 (Trader, compiles to pe_trader ) •Test cases in tests directory CourseNana.COM

To complete the milestone, you need to implement an auto-trader in pe_trader.c andpe_trader.h , which will be tested against a reference exchange server implementation. The logic of the auto-trader is very simple: as soon as a SELL order is available in the exchange, it will place an opposite BUY order to attempt to buy the item. As an example, as soon as the auto-trader receives the following message (and signal) from the ex- change: MARKET SELL CPU 2 300; It would place the following order: BUY CPU 2 300; The auto-trader should gracefully disconnect and shut down if there is a BUY order with quantity greater than or equal to 1000. For the milestone, you may assume that for the purposes of this auto-trader, there are no other com- peting traders placing BUY orders. However, signals are inherently unreliable, that is, multiple signals (perhaps from multiple auto- traders) may overwrite one another and cause a race condition. In the final version, you should design your auto-trader in such way that it is fault-tolerant, while conforming to the Exchange messaging protocol (first write to the pipe, then signal SIGUSR1 ), and does not place unreasonable load on the exchange. Page 5of 17 COMP2017 9017 PEX Exchange: Start Up The exchange accepts command line arguments as follows: ./pe_exchange [product file ][trader 0][trader 1]... [trader n ] The following example uses a product file named products.txt and trader binaries trader_a and trader_b: ./pe_exchange products.txt ./trader_a ./trader_b Upon start up, the exchange should read the product file to find out about what it will trade. It should then create two named pipes for each trader: /tmp/peexchange /tmp/petrader The peexchange named pipes are for the exchange write to each trader and petrader named pipes are for each trader to write to the exchange. After both pipes are created for a trader, the exchange shall launch that trader binary as a new child process, assigning it a trader ID starting from 0, in the Command Line Argument order. The trader ID shall be passed to the trader binary as a command line argument. For the example above, the trader binaries should be launched like so: CourseNana.COM

Traders may place orders with the exchange by sending the appropriate commands through their petrader named pipe. Once the whole command is written to the pipe, it shall notify the exchange with the SIGUSR1 signal. Once the exchange receives the SIGUSR1 signal from a trader, it would read the command from the petrader named pipe and process the order appropriately. Depending on whether the order was accepted (for new buy / sell orders), amended or cancelled, or if the command is invalid, it would write one of the following messages to the peexchange named pipe and notify the trader using the SIGUSR1 signal. Page 6of 17 COMP2017 9017 PEX ACCEPTED ; AMENDED ; CANCELLED ; INVALID; The exchange should also message all other traders (lowest trader IDs first) using the peexchange named pipes, and notify them using the SIGUSR1 signal, with the following message: MARKET ; N.B.: In case of a cancelled order, QTY = 0 and PRICE = 0. Sample order flow 1.Trader 0 writes to pe_trader_0: SELL 20 CPU 2 300; 2.Trader 0 sends SIGUSR1 signal to the Exchange 3.Exchange reads pe_trader_0 and adds the order to the order book 4.Exchange writes to pe_exchange_0: ACCEPTED 20; 5.Exchange sends SIGUSR1 signal to Trader 0 6.Exchange writes to all other peexchange pipes: MARKET SELL CPU 2 300; 7.Exchange sends SIGUSR1 signal to all other Traders. 8.All traders can read their own peexchange and places further orders if desired Exchange: Matching Orders The exchange should attempt to match orders once there is at least one BUY and one SELL order for any particular product. Orders match if the price of the BUY order is larger than or equal to the price of the SELL order. The matching price is the price of the older order. Of the two matched traders, the exchange charges 1% transaction fee to the trader who placed the order last, rounded to the nearest dollar (eg: $4.50 -> $5.00). When there are multiple orders in the exchange, order matching should follow price-time priority: •Match the highest-priced BUY order against lowest-priced SELL order Page 7of 17 COMP2017 9017 PEX •If there are multiple orders at the same price level, match the earliest order first As the order matches, the exchange shall write the following message to the appropriate peexchange pipes belonging to the matched traders, then send the SIGUSR1 signal: FILL ; The exchange should first sent the FILL message to the buyer of the order, then the seller. It is possible for a single order with sufficient quantity to match against multiple existing orders in the market. Similarly, an order could be partially filled and remain in the market if there isn’t sufficient quantity available. Orders are removed from the market once their quantity reaches zero. Example Scenarios ExampleOrderbook Before (type, qty, price)New OrderOrderbook After (type, qty, price)Explanation 0SELL 2 $500 BUY 2 $450BUY 2 $500 BUY 2 $450 The new buy order matched against the SELL order. Both orders are fully filled. 1SELL 2 $501 SELL 2 $500BUY 5 $505 BUY 1 $505 The new BUY order matched against both SELL orders. The SELL orders are fully filled. The BUY order is par- tially filled (qty 4) and re- mains on the market (qty 1). Exchange: Reporting In addition to reading and writing to the named pipes, the exchange also needs to print a range of messages to standard out (stdout), as per the examples later in this document. Please follow the examples for the outputs required. Specifically, the order book and trader positions need to be printed after each successful order, for example: [PEX] --ORDERBOOK-- [PEX] Product: GPU; Buy levels: 3; Sell levels: 1 [PEX] SELL 99 @ $511 (1 order) [PEX] BUY 30 @ $502 (1 order) [PEX] BUY 60 @ $501 (2 orders) [PEX] BUY 30 @ $500 (1 order) CourseNana.COM

[PEX] --POSITIONS-- [PEX] Trader 0: GPU 0 ($0), Router 0 ($0) Page 8of 17 COMP2017 9017 PEX Here, all orders in the market are sorted from the highest to lowest price. Each unique price is called a level, and there may be multiple orders in the same level. Positions refer to the quantity of products owned (or owed) by each trader, which may be positive or negative after each order. Note: Tabs ( \t) are used for indentation. Exchange: Teardown As soon as a trader disconnects (closing their end of the pipes or process exits), your exchange should print out the following message: [PEX] Trader disconnected It shall reject any pending or further orders from the trader but keep existing orders in the orderbook (if any). After all traders disconnect, the exchange should print out the following message: [PEX] Trading completed [PEX] Exchange fees collected: $ Make sure to clean up any remaining child processes, close and delete FIFOs, and free memory before exiting. Code Description To support your implementation, you need to provide a succinct answer to each of the questions in the file README.md . The word limit is 150 for each question. 1.Describe how your exchange works, using diagram(s) if necessary. 2.Describe your design decisions for the trader and how it’s fault-tolerant and efficient. 3.Describe your tests and how to run them. COMP2017 9017 PEX Working on your assignment Staff may make announcements on Ed ( https://edstem.org/ ) regarding any updates or clarifications to the assignment. The Ed resources section will contain a PDF outlining any notes/changes/corrections to the assignment. You can ask questions on Ed using the assignments category. Please read this assignment description carefully before asking questions. Please ensure that your work is your own and you do not share any code or solutions with other students. You can work on this assignment using your own computers or lab machines. You will need to submit to Ed via Git, which is covered elsewhere in this course. When you make a submission, your submission will be automatically compiled and run and you will receive feedback as to whether you passed the public test cases as well as a link that will enable you to inspect the output of your submission. It is important that you continually back up your assignment files. You are encouraged to submit your assignment while you are in the process of completing it to receive feedback and to check for correctness of your solution. Compilation and Execution Your program will be compiled by running the default rule of a make file. Upon compiling your program should produce a two binaries: pe_exchange ,pe_trader make ./pe_exchange products.txt ./trader_a ./trader_b Please make sure the above commands will compile and run your program. An example Makefile has been provided in the Scaffold, but you’re encouraged to customize it to your needs. Additionally, consider implementing the project using multiple C source files and utilizing header files. Tests will be compiled and run using two make rules; make tests andmake run_tests . make tests make run_tests These rules should build any tests you need, then execute each test and report back on your correct- ness. Failing to adhere to these conventions will prevent your markers from running your code and tests. In this circumstance you will be awarded a mark of 0 for this assignment. You are encouraged to submit multiple times, but only your last submission will be marked. Writing your own test cases We have provided you with some test cases but these do not test all the functionality described in the assignment. It is important that you thoroughly test your code by writing your own test cases, including both end-to-end (input / output) tests and unit tests using cmocka. •NULL pointers •Buffer overflows and underflows •Unable to open FIFOs •Unable to launch child processes •Invalid or malformed commands Restrictions If your program does not adhere to these restrictions, your submission will receive 0. •No Variable Length Arrays (VLAs) •No threads (processes only) •No excessive / 100% CPU usage when idling (eg: busy-waiting loops, active polling) •Traders must be launched as child processes of the exchange process. Marking A grade for this assignment is made where there is a submission that compiles and the oral examina- tion has been completed. •Milestone Automated Test Cases - 5- Passing automatic test cases. •Final Automated Test Cases - 10- Passing automatic test cases, a number of tests will notbe released or run until after your final submission. –You are guaranteed that no trader will send multiple signals to the exchange such that they would conflict, the order of signals sent to exchange program will be deterministic and reliable.

Get in Touch with Our Experts

Wechat WeChat
Whatsapp Whatsapp
Australia代写,University of Sydney代写,COMP2017代写,COMP9017代写,Systems Programming代写,C代写,PEX代写,ProgExchange代写,IPC代写,Australia代编,University of Sydney代编,COMP2017代编,COMP9017代编,Systems Programming代编,C代编,PEX代编,ProgExchange代编,IPC代编,Australia代考,University of Sydney代考,COMP2017代考,COMP9017代考,Systems Programming代考,C代考,PEX代考,ProgExchange代考,IPC代考,Australiahelp,University of Sydneyhelp,COMP2017help,COMP9017help,Systems Programminghelp,Chelp,PEXhelp,ProgExchangehelp,IPChelp,Australia作业代写,University of Sydney作业代写,COMP2017作业代写,COMP9017作业代写,Systems Programming作业代写,C作业代写,PEX作业代写,ProgExchange作业代写,IPC作业代写,Australia编程代写,University of Sydney编程代写,COMP2017编程代写,COMP9017编程代写,Systems Programming编程代写,C编程代写,PEX编程代写,ProgExchange编程代写,IPC编程代写,Australiaprogramming help,University of Sydneyprogramming help,COMP2017programming help,COMP9017programming help,Systems Programmingprogramming help,Cprogramming help,PEXprogramming help,ProgExchangeprogramming help,IPCprogramming help,Australiaassignment help,University of Sydneyassignment help,COMP2017assignment help,COMP9017assignment help,Systems Programmingassignment help,Cassignment help,PEXassignment help,ProgExchangeassignment help,IPCassignment help,Australiasolution,University of Sydneysolution,COMP2017solution,COMP9017solution,Systems Programmingsolution,Csolution,PEXsolution,ProgExchangesolution,IPCsolution,